Skip to content

Instantly share code, notes, and snippets.

@egy1st
Created January 17, 2019 22:21
Show Gist options
  • Save egy1st/f1dd65d990698be1134948252936ba5b to your computer and use it in GitHub Desktop.
Save egy1st/f1dd65d990698be1134948252936ba5b to your computer and use it in GitHub Desktop.
Created on Cognitive Class Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction/Business Problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## What is this business-case going to answer and where?\n",
"\n",
"### The place:\n",
"New York city, a USA state.\n",
"\n",
"### The problem:\n",
"A stakeholder has restaurant in Manhattan, he wants to expand his business by openening a new branch in the same state, New York. Where would he be recommended to open? \n",
"The stakeholder asked me to help him in finding the best place to open his new branch\n",
"\n",
"### The Dataset:\n",
"As a data analyst I got New York data from NYU spatial data repository and find that it gas 5 boroughs:\n",
"\n",
"* Manhattan with 40 neighbors\n",
"* Bronx with 52 neighbors\n",
"* Staten with Island 63 neighbors\n",
"* Brooklyn with 70 neighbors\n",
"* Queens with 81 neighbors\n",
"\n",
"\n",
"### The Methodology:\n",
"I planned my task as following by dividing it into two main methods:\n",
"1. which borough is more similar to Manhattan, thus it would be more appropriate to open there, if all other boroughs show great dissimilarity then I would recommend to open in the same borough, Manhattan, but in different place.\n",
"2. Then my task will be to choose the best place the restaurant would be placed in based on many criteria, mainly, competitors surrounding, competitors ratings and trending."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Process:\n",
"We are going to work on \"New York\" state in USA\n",
"* First we will extract all Newyork neighbors usind data provided by NYU spatial data repository at https://geo.nyu.edu \n",
"* Second, We will use Foursquare API provided by https://developer.foursquare.com/ to retrieve all needed location, Borough, Categories, Rating, and Trending information\n",
"this is the main data we will use for cleaning, wrangling and put for further investigations\n",
"\n",
"* Thirdly, We will use skilearn library from python to analysis our data using proper machine learning algorithms. There are many algorithms to use i.e k-nearest neighbors, k-means, DBScan, and and decision tree. We will use an algorithm best suits our case analysis and investigations.\n",
"\n",
"* Then we will use matplotlib library to visualize the investigated results on maps using Foluim library for python\n",
"\n",
"* Finally, we will put it all together in a simple way, such that stackholders can make their decision easily based on our data analysis investigation for this business case."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# import pandas library to work with dataframe\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib as mat"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# @hidden_cell\n",
"CLIENT_ID = '2UABPTQXVSFUWXVMSQYXON4FACFMLWPELLQFVBYK3S0TLBNV' # your Foursquare ID\n",
"CLIENT_SECRET = 'AFKQI22J5NIJ1JSMPU0ZJ2TGHMPAIT04BAPUUD1MOAOIYVLE' # your Foursquare Secret\n",
"VERSION = '20180604'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: geopy in /home/jupyterlab/conda/lib/python3.6/site-packages (1.11.0)\n",
"Requirement already satisfied: folium in /home/jupyterlab/conda/lib/python3.6/site-packages (0.5.0)\n",
"Requirement already satisfied: branca in /home/jupyterlab/conda/lib/python3.6/site-packages (from folium) (0.3.1)\n",
"Requirement already satisfied: jinja2 in /home/jupyterlab/conda/lib/python3.6/site-packages (from folium) (2.10)\n",
"Requirement already satisfied: requests in /home/jupyterlab/conda/lib/python3.6/site-packages (from folium) (2.20.1)\n",
"Requirement already satisfied: six in /home/jupyterlab/conda/lib/python3.6/site-packages (from folium) (1.11.0)\n",
"Requirement already satisfied: MarkupSafe>=0.23 in /home/jupyterlab/conda/lib/python3.6/site-packages (from jinja2->folium) (1.1.0)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /home/jupyterlab/conda/lib/python3.6/site-packages (from requests->folium) (2018.11.29)\n",
"Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/jupyterlab/conda/lib/python3.6/site-packages (from requests->folium) (3.0.4)\n",
"Requirement already satisfied: urllib3<1.25,>=1.21.1 in /home/jupyterlab/conda/lib/python3.6/site-packages (from requests->folium) (1.23)\n",
"Requirement already satisfied: idna<2.8,>=2.5 in /home/jupyterlab/conda/lib/python3.6/site-packages (from requests->folium) (2.7)\n",
"Folium installed\n",
"Libraries imported.\n"
]
}
],
"source": [
"#!conda install -c conda-forge geopy --yes \n",
"!pip install geopy \n",
"from geopy.geocoders import Nominatim # module to convert an address into latitude and longitude values\n",
"import requests # library to handle requests\n",
"\n",
"pd.set_option('display.max_columns', None)\n",
"pd.set_option('display.max_rows', None)\n",
"\n",
"import json # library to handle JSON files\n",
"\n",
"# libraries for displaying images\n",
"from IPython.display import Image \n",
"from IPython.core.display import HTML \n",
" \n",
"# tranforming json file into a pandas dataframe library\n",
"from pandas.io.json import json_normalize\n",
"\n",
"#!conda install -c conda-forge folium=0.5.0 --yes\n",
"!pip install folium\n",
"import folium # plotting library\n",
"\n",
"print('Folium installed')\n",
"print('Libraries imported.')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Function for creating map of any borough using latitude and longitude values\n",
"def print_map (my_data, zoom=11):\n",
" my_map = folium.Map(location=[latitude, longitude], zoom_start=zoom)\n",
" for lat, lng, label in zip(my_data['Latitude'], my_data['Longitude'], my_data['Neighborhood']):\n",
" label = folium.Popup(label, parse_html=True)\n",
" folium.CircleMarker(\n",
" [lat, lng],\n",
" radius=5,\n",
" popup=label,\n",
" color='blue',\n",
" fill=True,\n",
" fill_color='#3186cc',\n",
" fill_opacity=0.7,\n",
" parse_html=False).add_to(my_map)\n",
" return my_map"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data downloaded!\n"
]
}
],
"source": [
"!wget -q -O 'newyork_data.json' https://geo.nyu.edu/download/file/nyu-2451-34572-geojson.json\n",
"print('Data downloaded!')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"with open('newyork_data.json') as json_data:\n",
" df_newyork = json.load(json_data)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"df_newyork = df_newyork['features']"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'type': 'Feature',\n",
" 'id': 'nyu_2451_34572.1',\n",
" 'geometry': {'type': 'Point',\n",
" 'coordinates': [-73.84720052054902, 40.89470517661]},\n",
" 'geometry_name': 'geom',\n",
" 'properties': {'name': 'Wakefield',\n",
" 'stacked': 1,\n",
" 'annoline1': 'Wakefield',\n",
" 'annoline2': None,\n",
" 'annoline3': None,\n",
" 'annoangle': 0.0,\n",
" 'borough': 'Bronx',\n",
" 'bbox': [-73.84720052054902,\n",
" 40.89470517661,\n",
" -73.84720052054902,\n",
" 40.89470517661]}}"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#let us have a look\n",
"df_newyork[0]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# define the dataframe columns\n",
"column_names = ['Borough', 'Neighborhood', 'Latitude', 'Longitude'] \n",
"\n",
"# instantiate the dataframe\n",
"newyork_data = pd.DataFrame(columns=column_names)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"306"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df_newyork)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# let us populate it\n",
"for data in df_newyork:\n",
" borough = neighborhood_name = data['properties']['borough'] \n",
" neighborhood_name = data['properties']['name']\n",
" \n",
" neighborhood_latlon = data['geometry']['coordinates']\n",
" neighborhood_lat = neighborhood_latlon[1]\n",
" neighborhood_lon = neighborhood_latlon[0]\n",
" \n",
" newyork_data = newyork_data.append({'Borough': borough,\n",
" 'Neighborhood': neighborhood_name,\n",
" 'Latitude': neighborhood_lat,\n",
" 'Longitude': neighborhood_lon}, ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Borough</th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Bronx</td>\n",
" <td>Wakefield</td>\n",
" <td>40.894705</td>\n",
" <td>-73.847201</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Bronx</td>\n",
" <td>Co-op City</td>\n",
" <td>40.874294</td>\n",
" <td>-73.829939</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Bronx</td>\n",
" <td>Eastchester</td>\n",
" <td>40.887556</td>\n",
" <td>-73.827806</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Bronx</td>\n",
" <td>Fieldston</td>\n",
" <td>40.895437</td>\n",
" <td>-73.905643</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Bronx</td>\n",
" <td>Riverdale</td>\n",
" <td>40.890834</td>\n",
" <td>-73.912585</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Borough Neighborhood Latitude Longitude\n",
"0 Bronx Wakefield 40.894705 -73.847201\n",
"1 Bronx Co-op City 40.874294 -73.829939\n",
"2 Bronx Eastchester 40.887556 -73.827806\n",
"3 Bronx Fieldston 40.895437 -73.905643\n",
"4 Bronx Riverdale 40.890834 -73.912585"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"newyork_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The dataframe has 5 boroughs and 306 neighborhoods.\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Borough</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Bronx</th>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" <td>52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brooklyn</th>\n",
" <td>70</td>\n",
" <td>70</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Manhattan</th>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Queens</th>\n",
" <td>81</td>\n",
" <td>81</td>\n",
" <td>81</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Staten Island</th>\n",
" <td>63</td>\n",
" <td>63</td>\n",
" <td>63</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Neighborhood Latitude Longitude\n",
"Borough \n",
"Bronx 52 52 52\n",
"Brooklyn 70 70 70\n",
"Manhattan 40 40 40\n",
"Queens 81 81 81\n",
"Staten Island 63 63 63"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print('The dataframe has {} boroughs and {} neighborhoods.'.format(\n",
" len(newyork_data['Borough'].unique()),\n",
" newyork_data.shape[0]\n",
" )\n",
")\n",
"\n",
"#how many neighborhood each borough has\n",
"df_groups = newyork_data.groupby (['Borough']).count()\n",
"df_groups"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The geograpical coordinate of New York City are 40.7308619, -73.9871558.\n"
]
}
],
"source": [
"# Use geopy library to get the latitude and longitude values of New York City.\n",
"address = 'New York City, NY'\n",
"geolocator = Nominatim()\n",
"location = geolocator.geocode(address)\n",
"latitude = location.latitude\n",
"longitude = location.longitude\n",
"print('The geograpical coordinate of New York City are {}, {}.'.format(latitude, longitude))\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYiA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNDAuNzMwODYxOSwtNzMuOTg3MTU1OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfMWRiZmVjYzhjOTA1NDE4NzkwOWJkY2VjN2QyYWY2NjkgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxZDZmMjljMjczYzRiNTJiZjcxZGI3MTU1ZWVlNDYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODk0NzA1MTc2NjEsLTczLjg0NzIwMDUyMDU0OTAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxZWY5ZWJkNjY4YTRlYTA4M2U0MjczNjZiOTBmNDQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjNWQwN2FkNjMyMjRlNWQ5NDJkMDdhMGY0N2NmNjBmID0gJCgnPGRpdiBpZD0iaHRtbF9kYzVkMDdhZDYzMjI0ZTVkOTQyZDA3YTBmNDdjZjYwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FrZWZpZWxkPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMWVmOWViZDY2OGE0ZWEwODNlNDI3MzY2YjkwZjQ0MC5zZXRDb250ZW50KGh0bWxfZGM1ZDA3YWQ2MzIyNGU1ZDk0MmQwN2EwZjQ3Y2Y2MGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjFkNmYyOWMyNzNjNGI1MmJmNzFkYjcxNTVlZWU0NjAuYmluZFBvcHVwKHBvcHVwX2IxZWY5ZWJkNjY4YTRlYTA4M2U0MjczNjZiOTBmNDQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyMzRmNGNiMDhjMTQ5ZWViOTEyNTE4Y2FjNmI1MDc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc0Mjk0MTkzMDMwMTIsLTczLjgyOTkzOTEwODEyMzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwOGQ4YjY1YjI4MzQxNDdhNGRmNzA2OWUyOWYxNzE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmNDBmZDJlZWI3OTQyYjRhMDliYWQ3NjQ2YzlkODI2ID0gJCgnPGRpdiBpZD0iaHRtbF85ZjQwZmQyZWViNzk0MmI0YTA5YmFkNzY0NmM5ZDgyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q28tb3AgQ2l0eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA4ZDhiNjViMjgzNDE0N2E0ZGY3MDY5ZTI5ZjE3MTYuc2V0Q29udGVudChodG1sXzlmNDBmZDJlZWI3OTQyYjRhMDliYWQ3NjQ2YzlkODI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyMzRmNGNiMDhjMTQ5ZWViOTEyNTE4Y2FjNmI1MDc5LmJpbmRQb3B1cChwb3B1cF80MDhkOGI2NWIyODM0MTQ3YTRkZjcwNjllMjlmMTcxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzEwYmJmNzFlMTE0ZTdlODNlMmM1YTYyODJjZDkwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4NzU1NTY3NzM1MDc3NSwtNzMuODI3ODA2NDQ3MTY0MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2I2NTQ2OGFkOTljNGE5YzlmNmQ1NGM3OGQzZTA4MTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGY5NGM0ODE0OWFmNGYzYTg4ZDUwZjI3MjJlY2VhYWMgPSAkKCc8ZGl2IGlkPSJodG1sX2RmOTRjNDgxNDlhZjRmM2E4OGQ1MGYyNzIyZWNlYWFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0Y2hlc3RlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2I2NTQ2OGFkOTljNGE5YzlmNmQ1NGM3OGQzZTA4MTEuc2V0Q29udGVudChodG1sX2RmOTRjNDgxNDlhZjRmM2E4OGQ1MGYyNzIyZWNlYWFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzMTBiYmY3MWUxMTRlN2U4M2UyYzVhNjI4MmNkOTA3LmJpbmRQb3B1cChwb3B1cF9jYjY1NDY4YWQ5OWM0YTljOWY2ZDU0Yzc4ZDNlMDgxMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lY2RhOWMxNTM2YmQ0ZGI0OWM0ZGMxNDRjYjdlZGU4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg5NTQzNzQyNjkwMzgzLC03My45MDU2NDI1OTU5MTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmRjZmY5MjJkNDA0NWEwOGI2Zjk0ODdmNmZkYTg0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDZlYTMxMjBkY2Q0ODM1YWQyMjdhM2I1NjRhZTY4MCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGQ2ZWEzMTIwZGNkNDgzNWFkMjI3YTNiNTY0YWU2ODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpZWxkc3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJkY2ZmOTIyZDQwNDVhMDhiNmY5NDg3ZjZmZGE4NDkuc2V0Q29udGVudChodG1sXzhkNmVhMzEyMGRjZDQ4MzVhZDIyN2EzYjU2NGFlNjgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjZGE5YzE1MzZiZDRkYjQ5YzRkYzE0NGNiN2VkZThiLmJpbmRQb3B1cChwb3B1cF82YmRjZmY5MjJkNDA0NWEwOGI2Zjk0ODdmNmZkYTg0OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYjJiM2VlZjcyNGI0NzY2OWNiZmFmMTcyZWRkZmM3ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg5MDgzNDQ5Mzg5MTMwNSwtNzMuOTEyNTg1NDYxMDg1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Y2UxY2EzODMxZTY0NDRiYjJlZjVmYjBkYzlhNjdmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMWU5NTlkNDdjNGM0MWUxODY3YzA4OTIzY2NlNGQ4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfMjFlOTU5ZDQ3YzRjNDFlMTg2N2MwODkyM2NjZTRkOGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyZGFsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNlMWNhMzgzMWU2NDQ0YmIyZWY1ZmIwZGM5YTY3ZmIuc2V0Q29udGVudChodG1sXzIxZTk1OWQ0N2M0YzQxZTE4NjdjMDg5MjNjY2U0ZDhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiMmIzZWVmNzI0YjQ3NjY5Y2JmYWYxNzJlZGRmYzdmLmJpbmRQb3B1cChwb3B1cF81Y2UxY2EzODMxZTY0NDRiYjJlZjVmYjBkYzlhNjdmYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGY3MWQ1OTQxZjY0OWQ3YmUxNWM4NjlmNDExZmU0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4MTY4NzM3MTIwNTIxLC03My45MDI4MTc5ODcyNDYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOTE1ZjVhNTc4NWE0ODZkYmRhNDM5MDYwZjhmMzhjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTE2Mzg5ZWIzNDk0NWZjYjJkZjUxNTZiOTljNzdlYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjUxNjM4OWViMzQ5NDVmY2IyZGY1MTU2Yjk5Yzc3ZWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpbmdzYnJpZGdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOTE1ZjVhNTc4NWE0ODZkYmRhNDM5MDYwZjhmMzhjOS5zZXRDb250ZW50KGh0bWxfZjUxNjM4OWViMzQ5NDVmY2IyZGY1MTU2Yjk5Yzc3ZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRmNzFkNTk0MWY2NDlkN2JlMTVjODY5ZjQxMWZlNDEuYmluZFBvcHVwKHBvcHVwX2I5MTVmNWE1Nzg1YTQ4NmRiZGE0MzkwNjBmOGYzOGM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExYzM5NWNjZmRjZjRkODQ4ODhmZDM3ZDRmNmVmMjg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc2NTUwNzc4Nzk5NjQsLTczLjkxMDY1OTY1ODYyOTgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyMTgyNTk2Y2E2YzQwMTg5ZWYyMjMxYjc1YmNjMmNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzYjczZjM5Y2NkZjRiZTg4YjEyOGI0NDc0ZmQwYjUzID0gJCgnPGRpdiBpZD0iaHRtbF9lM2I3M2YzOWNjZGY0YmU4OGIxMjhiNDQ3NGZkMGI1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFyYmxlIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyMTgyNTk2Y2E2YzQwMTg5ZWYyMjMxYjc1YmNjMmNlLnNldENvbnRlbnQoaHRtbF9lM2I3M2YzOWNjZGY0YmU4OGIxMjhiNDQ3NGZkMGI1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMWMzOTVjY2ZkY2Y0ZDg0ODg4ZmQzN2Q0ZjZlZjI4NS5iaW5kUG9wdXAocG9wdXBfZTIxODI1OTZjYTZjNDAxODllZjIyMzFiNzViY2MyY2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTk4YTAwZGJkMmI3NDRmN2I1ZDZlYmI5NGM4MzI1YTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44OTgyNzI2MTIxMzgwNSwtNzMuODY3MzE0OTY4MTQxNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzgzYjk1N2MxMzI4NGQ3MDhmOGY0ZGU3ZDAwMjVhMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGRjZWNhYjMzNjg2NGVjZDhiZThmOTkwMTE2YWJmZjAgPSAkKCc8ZGl2IGlkPSJodG1sXzRkY2VjYWIzMzY4NjRlY2Q4YmU4Zjk5MDExNmFiZmYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb29kbGF3bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzgzYjk1N2MxMzI4NGQ3MDhmOGY0ZGU3ZDAwMjVhMzUuc2V0Q29udGVudChodG1sXzRkY2VjYWIzMzY4NjRlY2Q4YmU4Zjk5MDExNmFiZmYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5OGEwMGRiZDJiNzQ0ZjdiNWQ2ZWJiOTRjODMyNWEwLmJpbmRQb3B1cChwb3B1cF8zODNiOTU3YzEzMjg0ZDcwOGY4ZjRkZTdkMDAyNWEzNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYTBhYzVkNjc1MDQ0OTU3YWVlMmM4Njc2ODM0YmNmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3NzIyNDE1NTk5NDQ2LC03My44NzkzOTA3Mzk1NjgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiYzllYTJjNDM0MTQ4MjBiZDA2NDRjZmYyYTU4Y2E3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YjdlOGVkM2RlMjQ1NTFiMWQwMDI5MGYwNTZkZTRkID0gJCgnPGRpdiBpZD0iaHRtbF8yNWI3ZThlZDNkZTI0NTUxYjFkMDAyOTBmMDU2ZGU0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9yd29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJjOWVhMmM0MzQxNDgyMGJkMDY0NGNmZjJhNThjYTcuc2V0Q29udGVudChodG1sXzI1YjdlOGVkM2RlMjQ1NTFiMWQwMDI5MGYwNTZkZTRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhMGFjNWQ2NzUwNDQ5NTdhZWUyYzg2NzY4MzRiY2YzLmJpbmRQb3B1cChwb3B1cF9mYmM5ZWEyYzQzNDE0ODIwYmQwNjQ0Y2ZmMmE1OGNhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MGMzYzM1ZDVlZWE0NTAyODJlNGJiNDk5ZWJiMGM5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4MTAzODg3ODE5MjExLC03My44NTc0NDY0Mjk3NDIwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTNjMWM1YmY1ZWQ0ODNiOWVkOWQwY2Q5MWZjODdiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOWRhNzhjMWIzMzc0NmE0YWIzZjIzODMzZjQ1ZDYzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTlkYTc4YzFiMzM3NDZhNGFiM2YyMzgzM2Y0NWQ2MzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxpYW1zYnJpZGdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTNjMWM1YmY1ZWQ0ODNiOWVkOWQwY2Q5MWZjODdiMy5zZXRDb250ZW50KGh0bWxfZTlkYTc4YzFiMzM3NDZhNGFiM2YyMzgzM2Y0NWQ2MzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjBjM2MzNWQ1ZWVhNDUwMjgyZTRiYjQ5OWViYjBjOTguYmluZFBvcHVwKHBvcHVwX2IxM2MxYzViZjVlZDQ4M2I5ZWQ5ZDBjZDkxZmM4N2IzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxYzIwZTcwNzBjNDRiZDhhMmM3ZmI1MDcxNGMxYTk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODY2ODU4MTA3MjUyNjk2LC03My44MzU3OTc1OTgwODExN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNWVhMTZiNDQ2YmU0NzI2ODgyMjFjODQzZTY0OWQwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzQxZDM0MTkzOTY0ZjdkYjRmZmFkMmY2NjI5MDU2YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjM0MWQzNDE5Mzk2NGY3ZGI0ZmZhZDJmNjYyOTA1NmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheWNoZXN0ZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1ZWExNmI0NDZiZTQ3MjY4ODIyMWM4NDNlNjQ5ZDBmLnNldENvbnRlbnQoaHRtbF9mMzQxZDM0MTkzOTY0ZjdkYjRmZmFkMmY2NjI5MDU2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MWMyMGU3MDcwYzQ0YmQ4YTJjN2ZiNTA3MTRjMWE5NC5iaW5kUG9wdXAocG9wdXBfYjVlYTE2YjQ0NmJlNDcyNjg4MjIxYzg0M2U2NDlkMGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTI0YzlhNGZhOTdmNGQ5Mjg3Y2Y5OWVlYjg2NTYxNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTc0MTM0OTgwODg2NSwtNzMuODU0NzU1NjQwMTc5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA3Y2ZkZGEwZmE0NGJjZGI0NjBhNTQ4MWJkZGM3Y2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODhkNzhmMWRkNmJkNGUxZDhkZjE1YmQ2MzVhZTVmNDQgPSAkKCc8ZGl2IGlkPSJodG1sXzg4ZDc4ZjFkZDZiZDRlMWQ4ZGYxNWJkNjM1YWU1ZjQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZWxoYW0gUGFya3dheTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTA3Y2ZkZGEwZmE0NGJjZGI0NjBhNTQ4MWJkZGM3Y2Yuc2V0Q29udGVudChodG1sXzg4ZDc4ZjFkZDZiZDRlMWQ4ZGYxNWJkNjM1YWU1ZjQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UyNGM5YTRmYTk3ZjRkOTI4N2NmOTllZWI4NjU2MTRiLmJpbmRQb3B1cChwb3B1cF8xMDdjZmRkYTBmYTQ0YmNkYjQ2MGE1NDgxYmRkYzdjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjgzMzg3NDEzYTU0OTdiYWYxMzQzZTljYmJiMWM0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0NzI0NjcwNDkxODEzLC03My43ODY0ODg0NTI2NzQxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzFiODcxYTMyMDQ0ZTA4OWRlMGNkNWNiMWMxNTVmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNzQ4NDk3ZGE1ZjQ0YTc1OWZhMzYxNTc5ZGQ2ZjdkZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDc0ODQ5N2RhNWY0NGE3NTlmYTM2MTU3OWRkNmY3ZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNpdHkgSXNsYW5kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzFiODcxYTMyMDQ0ZTA4OWRlMGNkNWNiMWMxNTVmOS5zZXRDb250ZW50KGh0bWxfMDc0ODQ5N2RhNWY0NGE3NTlmYTM2MTU3OWRkNmY3ZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2Y4MzM4NzQxM2E1NDk3YmFmMTM0M2U5Y2JiYjFjNDcuYmluZFBvcHVwKHBvcHVwXzFjMWI4NzFhMzIwNDRlMDg5ZGUwY2Q1Y2IxYzE1NWY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0OTc5OWY4ZjUxZTQxZDhiNDM3MmFjNzcyMzQ1MGQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODcwMTg1MTY0OTc1MzI1LC03My44ODU1MTIxODQxOTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4Y2JlMzAwNDNlNzRmOTk5M2JhMDQ4YmE4YzZiN2I4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViODg1ZGViNmJjNTQ2NTI5NWZjMmUyMzUxNjIwNmNmID0gJCgnPGRpdiBpZD0iaHRtbF9lYjg4NWRlYjZiYzU0NjUyOTVmYzJlMjM1MTYyMDZjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVkZm9yZCBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OGNiZTMwMDQzZTc0Zjk5OTNiYTA0OGJhOGM2YjdiOC5zZXRDb250ZW50KGh0bWxfZWI4ODVkZWI2YmM1NDY1Mjk1ZmMyZTIzNTE2MjA2Y2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzQ5Nzk5ZjhmNTFlNDFkOGI0MzcyYWM3NzIzNDUwZDMuYmluZFBvcHVwKHBvcHVwXzQ4Y2JlMzAwNDNlNzRmOTk5M2JhMDQ4YmE4YzZiN2I4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0NDg4ZjBmMzc2ZDRkNzg5ODIyY2E3MTllZTQzNWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODU1NzI3MDc3MTk2NjQsLTczLjkxMDQxNTk2MTkxMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDdmZTFhMjY1NzU2NGIwZmEwMjJiODY1Mzg3MDI3NWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTRkMDMyZWNjNzczNDhjMjhmNTMzZDNiNGMzNTU4N2MgPSAkKCc8ZGl2IGlkPSJodG1sXzU0ZDAzMmVjYzc3MzQ4YzI4ZjUzM2QzYjRjMzU1ODdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Vbml2ZXJzaXR5IEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3ZmUxYTI2NTc1NjRiMGZhMDIyYjg2NTM4NzAyNzViLnNldENvbnRlbnQoaHRtbF81NGQwMzJlY2M3NzM0OGMyOGY1MzNkM2I0YzM1NTg3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNDQ4OGYwZjM3NmQ0ZDc4OTgyMmNhNzE5ZWU0MzVlMy5iaW5kUG9wdXAocG9wdXBfNDdmZTFhMjY1NzU2NGIwZmEwMjJiODY1Mzg3MDI3NWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDM2NDU4OWJkYzhkNDNkMGFiZGI0YWIwZDJlMWZkYmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDc4OTc5MjYwNjI3MSwtNzMuOTE5NjcxNTkxMTk1NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmYwM2YwN2M4NGY1NDQyYmFlOWE3MjU1NzNiMjczMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY2MTQyNjczZDFkNDVkNmEyM2UxYzc0ZDI5MTkyNDAgPSAkKCc8ZGl2IGlkPSJodG1sX2VmNjE0MjY3M2QxZDQ1ZDZhMjNlMWM3NGQyOTE5MjQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3JyaXMgSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmYwM2YwN2M4NGY1NDQyYmFlOWE3MjU1NzNiMjczMTUuc2V0Q29udGVudChodG1sX2VmNjE0MjY3M2QxZDQ1ZDZhMjNlMWM3NGQyOTE5MjQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzNjQ1ODliZGM4ZDQzZDBhYmRiNGFiMGQyZTFmZGJhLmJpbmRQb3B1cChwb3B1cF82ZjAzZjA3Yzg0ZjU0NDJiYWU5YTcyNTU3M2IyNzMxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNThjNDIxOTliN2M0YmI2OWI0M2RkZTI3YjZlZDAwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg2MDk5Njc5NjM4NjU0LC03My44OTY0MjY1NTk4MTYyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjUxYjExYTY4Y2E0ZWI2OWExMjk3NmM3YTNhOTQyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjkwZTg2ZWEyMzQ0ZjUxYTEwZjBiZDg2ZWNjNmU1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjY5MGU4NmVhMjM0NGY1MWExMGYwYmQ4NmVjYzZlNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZvcmRoYW08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyNTFiMTFhNjhjYTRlYjY5YTEyOTc2YzdhM2E5NDJkLnNldENvbnRlbnQoaHRtbF9mNjkwZTg2ZWEyMzQ0ZjUxYTEwZjBiZDg2ZWNjNmU1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNThjNDIxOTliN2M0YmI2OWI0M2RkZTI3YjZlZDAwNS5iaW5kUG9wdXAocG9wdXBfMjI1MWIxMWE2OGNhNGViNjlhMTI5NzZjN2EzYTk0MmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWFiNmE3OTMwMTc3NDdjM2IyNmMxZTVjM2M5ODRkOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDI2OTYxNTc4NjA1MywtNzMuODg3MzU2MTc1MzIzMzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDc1MTdiYTA2ZDE4NDNkMDliNWQwNTY1OWVjOTg1ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjA0ODEzNGMwMDMwNDZhYWI4YjMzOGY3MjJkMjFjMmQgPSAkKCc8ZGl2IGlkPSJodG1sXzYwNDgxMzRjMDAzMDQ2YWFiOGIzMzhmNzIyZDIxYzJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IFRyZW1vbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3NTE3YmEwNmQxODQzZDA5YjVkMDU2NTllYzk4NWQ3LnNldENvbnRlbnQoaHRtbF82MDQ4MTM0YzAwMzA0NmFhYjhiMzM4ZjcyMmQyMWMyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YWI2YTc5MzAxNzc0N2MzYjI2YzFlNWMzYzk4NGQ5YS5iaW5kUG9wdXAocG9wdXBfZDc1MTdiYTA2ZDE4NDNkMDliNWQwNTY1OWVjOTg1ZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTRmMWE5YmQ3ZjgwNDZiMmFkZGRjZTY0Yzg1MjJhMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Mzk0NzUwNTY3MjY1MywtNzMuODc3NzQ0NzQ5MTA1NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDViMGIyYjgwNDA1NDhmYWIyOGIyMTcyYjkyYWEwMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWUzMmRkNjU1NmY5NDJmODg1NTVmZDE1MWUwMDExYmYgPSAkKCc8ZGl2IGlkPSJodG1sX2VlMzJkZDY1NTZmOTQyZjg4NTU1ZmQxNTFlMDAxMWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IEZhcm1zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNWIwYjJiODA0MDU0OGZhYjI4YjIxNzJiOTJhYTAxZi5zZXRDb250ZW50KGh0bWxfZWUzMmRkNjU1NmY5NDJmODg1NTVmZDE1MWUwMDExYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTRmMWE5YmQ3ZjgwNDZiMmFkZGRjZTY0Yzg1MjJhMGYuYmluZFBvcHVwKHBvcHVwXzA1YjBiMmI4MDQwNTQ4ZmFiMjhiMjE3MmI5MmFhMDFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmMzNhOGQxMjEyODQwNzFhYzNjOTMyMDA0OGQ2Yjk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODM2NjIzMDEwNzA2MDU2LC03My45MjYxMDIwOTM1ODEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2OTE3NzI2NmExMTQ5MDQ5MWZiYzY3MjBmMWI2ZjZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MDg2NTBmMTE0MTQwM2M5ZDAyYWZmOTZiZDhmNzI3ID0gJCgnPGRpdiBpZD0iaHRtbF82NzA4NjUwZjExNDE0MDNjOWQwMmFmZjk2YmQ4ZjcyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGlnaCAgQnJpZGdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjkxNzcyNjZhMTE0OTA0OTFmYmM2NzIwZjFiNmY2ZS5zZXRDb250ZW50KGh0bWxfNjcwODY1MGYxMTQxNDAzYzlkMDJhZmY5NmJkOGY3MjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmYzM2E4ZDEyMTI4NDA3MWFjM2M5MzIwMDQ4ZDZiOTQuYmluZFBvcHVwKHBvcHVwXzA2OTE3NzI2NmExMTQ5MDQ5MWZiYzY3MjBmMWI2ZjZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2MDhiYmM4OTMxMTQ5YmM4ZGI3MDcyMDM0YTJiYjZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE5NzU0MzcwNTk0OTM2LC03My45MDk0MjE2MDc1NzQzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzU2OTViNjFkNmM0ZWI2OTFmNWE3ZTRiYzYxZDE1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjFiYmUzYmQ3Yjk0MGJjYWRiMWNmYzM4NmY4NzQyNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjIxYmJlM2JkN2I5NDBiY2FkYjFjZmMzODZmODc0MjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1lbHJvc2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzNTY5NWI2MWQ2YzRlYjY5MWY1YTdlNGJjNjFkMTVhLnNldENvbnRlbnQoaHRtbF8yMjFiYmUzYmQ3Yjk0MGJjYWRiMWNmYzM4NmY4NzQyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNjA4YmJjODkzMTE0OWJjOGRiNzA3MjAzNGEyYmI2ZS5iaW5kUG9wdXAocG9wdXBfMzM1Njk1YjYxZDZjNGViNjkxZjVhN2U0YmM2MWQxNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGUzYThjN2YwNmEwNDI3ZmEyMWQ0ZGJjMTcwNTc1NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDYyMzg3NDkzNTE3NywtNzMuOTE2MDk5ODc0ODc1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWJkMzcxMTMyODFlNGZlMmIxZjIxMGZhNWVhOGVjMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTg4ZjZhZjVmNTBjNGMxZjk0OTM2M2QwNjM5M2VjNTMgPSAkKCc8ZGl2IGlkPSJodG1sX2U4OGY2YWY1ZjUwYzRjMWY5NDkzNjNkMDYzOTNlYzUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3R0IEhhdmVuPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYmQzNzExMzI4MWU0ZmUyYjFmMjEwZmE1ZWE4ZWMyOC5zZXRDb250ZW50KGh0bWxfZTg4ZjZhZjVmNTBjNGMxZjk0OTM2M2QwNjM5M2VjNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGUzYThjN2YwNmEwNDI3ZmEyMWQ0ZGJjMTcwNTc1NzguYmluZFBvcHVwKHBvcHVwX2ViZDM3MTEzMjgxZTRmZTJiMWYyMTBmYTVlYThlYzI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2OTE0MmRlMDE5YjQ3OThiN2YxNTVjMzMwY2UwYmJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAxNjYzNjI3NzU2MjA2LC03My45MTMyMjEzOTM4NjEzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NmQ2MzE4OWQ0MTQ0MTcxODMwY2ZhNmM3MmFmMWRjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDc5ZTc5YWMzMWM0MWY2YWE5Y2E2MmZlZTFhYWE2YSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjA3OWU3OWFjMzFjNDFmNmFhOWNhNjJmZWUxYWFhNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBvcnQgTW9ycmlzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NmQ2MzE4OWQ0MTQ0MTcxODMwY2ZhNmM3MmFmMWRjYS5zZXRDb250ZW50KGh0bWxfMjA3OWU3OWFjMzFjNDFmNmFhOWNhNjJmZWUxYWFhNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjY5MTQyZGUwMTliNDc5OGI3ZjE1NWMzMzBjZTBiYmQuYmluZFBvcHVwKHBvcHVwXzg2ZDYzMTg5ZDQxNDQxNzE4MzBjZmE2YzcyYWYxZGNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhYWRmYjdiMGY0MDRlMDFhM2NlNDY3YzMyNWY2ZmZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1MDk5MDQ1NDU4MjIsLTczLjg5NTc4ODIwMDk0NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE0N2E1ZTA0OGNhNGNjYTljOTIzNmQ3NTQ5MDlkNmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE3ODRmNjgyYzU2NGJjMDgxODU5NGU0MzExZjc1NGUgPSAkKCc8ZGl2IGlkPSJodG1sXzhhNzg0ZjY4MmM1NjRiYzA4MTg1OTRlNDMxMWY3NTRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Mb25nd29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTE0N2E1ZTA0OGNhNGNjYTljOTIzNmQ3NTQ5MDlkNmEuc2V0Q29udGVudChodG1sXzhhNzg0ZjY4MmM1NjRiYzA4MTg1OTRlNDMxMWY3NTRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhYWRmYjdiMGY0MDRlMDFhM2NlNDY3YzMyNWY2ZmZmLmJpbmRQb3B1cChwb3B1cF8xMTQ3YTVlMDQ4Y2E0Y2NhOWM5MjM2ZDc1NDkwOWQ2YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTJkMjNmNDYxOGM0NzNmODUzYWNmYjhkMTM2ODI1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwOTcyOTg3OTM4NzA5LC03My44ODMzMTUwNTk1NTI5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYTYzZDRjMDRjZmE0N2RhYWFlYWZlMjVlYjYzZjRhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTYyODY1ZjQ4ZmU0MjAzODVhYzQzOTZjNWJmM2MxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTE2Mjg2NWY0OGZlNDIwMzg1YWM0Mzk2YzViZjNjMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1bnRzIFBvaW50PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYTYzZDRjMDRjZmE0N2RhYWFlYWZlMjVlYjYzZjRhMy5zZXRDb250ZW50KGh0bWxfZTE2Mjg2NWY0OGZlNDIwMzg1YWM0Mzk2YzViZjNjMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmEyZDIzZjQ2MThjNDczZjg1M2FjZmI4ZDEzNjgyNTEuYmluZFBvcHVwKHBvcHVwX2JhNjNkNGMwNGNmYTQ3ZGFhYWVhZmUyNWViNjNmNGEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiZTlhODEwYjBiYjQ3ZDdhMWVkZjE3ZTgzNmVkYTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIzNTkxOTg1ODU1MzQsLTczLjkwMTUwNjQ4OTQzMDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhM2Q2MzFkMjJlNDQ5ZDhiZWRhMWQ5MGZiNDZlNWYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExMWMxNzM5MGJiNTQ4OWE5ZDU1N2FlZmQyODBjMGEzID0gJCgnPGRpdiBpZD0iaHRtbF9hMTFjMTczOTBiYjU0ODlhOWQ1NTdhZWZkMjgwYzBhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9ycmlzYW5pYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmEzZDYzMWQyMmU0NDlkOGJlZGExZDkwZmI0NmU1ZjIuc2V0Q29udGVudChodG1sX2ExMWMxNzM5MGJiNTQ4OWE5ZDU1N2FlZmQyODBjMGEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiZTlhODEwYjBiYjQ3ZDdhMWVkZjE3ZTgzNmVkYTdjLmJpbmRQb3B1cChwb3B1cF82YTNkNjMxZDIyZTQ0OWQ4YmVkYTFkOTBmYjQ2ZTVmMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMWFiNDIwN2NhMjQ0NGUyYTgyNmNlNzU0ZjVhZDJiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMTAxMjE5NzkxNDAxNSwtNzMuODY1NzQ2MDk1NTQ5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2RmZWE2MWZjZGI3NDMzODhlOTVlYTIyMWU0OGQ5ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTBlMjNiODA0NDg3NDkwNGJkZjVlOWQzOTMwNmQ5Y2QgPSAkKCc8ZGl2IGlkPSJodG1sX2EwZTIzYjgwNDQ4NzQ5MDRiZGY1ZTlkMzkzMDZkOWNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3VuZHZpZXc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkZmVhNjFmY2RiNzQzMzg4ZTk1ZWEyMjFlNDhkOWZlLnNldENvbnRlbnQoaHRtbF9hMGUyM2I4MDQ0ODc0OTA0YmRmNWU5ZDM5MzA2ZDljZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMWFiNDIwN2NhMjQ0NGUyYTgyNmNlNzU0ZjVhZDJiYS5iaW5kUG9wdXAocG9wdXBfM2RmZWE2MWZjZGI3NDMzODhlOTVlYTIyMWU0OGQ5ZmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWZhNTMyZjNhZGZlNDdhYzhlMGQwMTU3YTNkMmZlYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDY1NTExMjAwMzU4OSwtNzMuODU0MTQ0MTYxODkyNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Q0MzFiN2JhYmY3NGU0NzljNzdlZTMzMTZkM2JlYzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjFlYWI0MzlhYmQ1NDVlZWFjYmRkMDdiMjYxMTk3MTEgPSAkKCc8ZGl2IGlkPSJodG1sX2YxZWFiNDM5YWJkNTQ1ZWVhY2JkZDA3YjI2MTE5NzExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGFzb24gUG9pbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkNDMxYjdiYWJmNzRlNDc5Yzc3ZWUzMzE2ZDNiZWM2LnNldENvbnRlbnQoaHRtbF9mMWVhYjQzOWFiZDU0NWVlYWNiZGQwN2IyNjExOTcxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZmE1MzJmM2FkZmU0N2FjOGUwZDAxNTdhM2QyZmVhOS5iaW5kUG9wdXAocG9wdXBfY2Q0MzFiN2JhYmY3NGU0NzljNzdlZTMzMTZkM2JlYzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDM2MjRlNDNhNTE5NGVlYmE0OWU4YjMyNDAxY2YzOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTUxMDkyNTgwNDAwNSwtNzMuODE2MzUwMDIxNTg0NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmE5NjUyMTRkMDIwNDU0ZmI2OTA3ZDZmYjlhZTU3N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2VlNmE3YTQ2YzlmNDAyYWI5YmI4OTg3ZmZmNjFlMTMgPSAkKCc8ZGl2IGlkPSJodG1sXzdlZTZhN2E0NmM5ZjQwMmFiOWJiODk4N2ZmZjYxZTEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaHJvZ3MgTmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmE5NjUyMTRkMDIwNDU0ZmI2OTA3ZDZmYjlhZTU3N2Yuc2V0Q29udGVudChodG1sXzdlZTZhN2E0NmM5ZjQwMmFiOWJiODk4N2ZmZjYxZTEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzNjI0ZTQzYTUxOTRlZWJhNDllOGIzMjQwMWNmMzk0LmJpbmRQb3B1cChwb3B1cF82YTk2NTIxNGQwMjA0NTRmYjY5MDdkNmZiOWFlNTc3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTU2OTFhYzE0OWY0NzQzOWFmMGRlOTQzNzIyYzI1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0NDI0NTkzNjk0NzM3NCwtNzMuODI0MDk5MjY3NTM4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNzUxNjI1NWJkMWM0YzRkYjU3MGI0YjcyN2RkMGIzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Nzc3NWFmZGQxOTg0MDg2OWNhMjU5ZTI3MTFmMTdhYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzc3NzVhZmRkMTk4NDA4NjljYTI1OWUyNzExZjE3YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvdW50cnkgQ2x1YjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjc1MTYyNTViZDFjNGM0ZGI1NzBiNGI3MjdkZDBiMzQuc2V0Q29udGVudChodG1sXzc3Nzc1YWZkZDE5ODQwODY5Y2EyNTllMjcxMWYxN2FhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlNTY5MWFjMTQ5ZjQ3NDM5YWYwZGU5NDM3MjJjMjUxLmJpbmRQb3B1cChwb3B1cF9mNzUxNjI1NWJkMWM0YzRkYjU3MGI0YjcyN2RkMGIzNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMWQyNmNiNDA4ODQ0MzY4ODI4ZGUxZGYwOGY5N2Q1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgzNzkzNzgyMjI2NzI4NiwtNzMuODU2MDAzMTA1MzU3ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM1NWRlZWZmOTc3NDdiYzhhZjI4ZTBjNDM4NjQzNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODJjYmU4M2QyMGMxNDY5NjlkNDc2NTFkOTA4ZTYxMzQgPSAkKCc8ZGl2IGlkPSJodG1sXzgyY2JlODNkMjBjMTQ2OTY5ZDQ3NjUxZDkwOGU2MTM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrY2hlc3RlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWM1NWRlZWZmOTc3NDdiYzhhZjI4ZTBjNDM4NjQzNzkuc2V0Q29udGVudChodG1sXzgyY2JlODNkMjBjMTQ2OTY5ZDQ3NjUxZDkwOGU2MTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxZDI2Y2I0MDg4NDQzNjg4MjhkZTFkZjA4Zjk3ZDUyLmJpbmRQb3B1cChwb3B1cF85YzU1ZGVlZmY5Nzc0N2JjOGFmMjhlMGM0Mzg2NDM3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTYzNmVmMzUxOGQ0OGUyODBjZjZiMjM3ZGQyMTQ2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0MDYxOTQ5NjQzMjcsLTczLjg0MjE5NDA3NjA0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1NDFkZjM4MmIzYTRhYjViOGFkOGM4ZTUxYjI5YTZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5YzE4OWU1ZmY3MDQ2YjNiZmRmY2MwMjZkMWMyMmU0ID0gJCgnPGRpdiBpZD0iaHRtbF8wOWMxODllNWZmNzA0NmIzYmZkZmNjMDI2ZDFjMjJlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdGNoZXN0ZXIgU3F1YXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NTQxZGYzODJiM2E0YWI1YjhhZDhjOGU1MWIyOWE2Yi5zZXRDb250ZW50KGh0bWxfMDljMTg5ZTVmZjcwNDZiM2JmZGZjYzAyNmQxYzIyZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmU2MzZlZjM1MThkNDhlMjgwY2Y2YjIzN2RkMjE0NjguYmluZFBvcHVwKHBvcHVwXzQ1NDFkZjM4MmIzYTRhYjViOGFkOGM4ZTUxYjI5YTZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwMDdmNGNiODM2OTQ0YTBhNTNjMTM2OThiNGE2NDAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQzNjA4NDcxMjQ3MTgsLTczLjg2NjI5OTE4MDc1NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTc0MGVjNmY5Y2VmNDkzN2JiOTc2MjYxMzU3ODVhZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjEwNTBlZWY5ZjQ1NGMzNDljYmQ5NjFjNzBhMTIwMGUgPSAkKCc8ZGl2IGlkPSJodG1sXzIxMDUwZWVmOWY0NTRjMzQ5Y2JkOTYxYzcwYTEyMDBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WYW4gTmVzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTc0MGVjNmY5Y2VmNDkzN2JiOTc2MjYxMzU3ODVhZjguc2V0Q29udGVudChodG1sXzIxMDUwZWVmOWY0NTRjMzQ5Y2JkOTYxYzcwYTEyMDBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwMDdmNGNiODM2OTQ0YTBhNTNjMTM2OThiNGE2NDAwLmJpbmRQb3B1cChwb3B1cF8xNzQwZWM2ZjljZWY0OTM3YmI5NzYyNjEzNTc4NWFmOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZmI2Y2ZlYjNjYmY0MjI4ODhjNmRiNjE2YjQ5NTJmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0NzU0OTA2MzUzNjMzNCwtNzMuODUwNDAxNzgwMzA0MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjg3MzY1M2M3NDFiNGZiMWEwMjdkMTJiNWE3OWJkMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTIzZDU1MzEwMDViNGJlMzg4MWY5ZjMxYWQ1YjQ1M2QgPSAkKCc8ZGl2IGlkPSJodG1sXzEyM2Q1NTMxMDA1YjRiZTM4ODFmOWYzMWFkNWI0NTNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3JyaXMgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg3MzY1M2M3NDFiNGZiMWEwMjdkMTJiNWE3OWJkMjMuc2V0Q29udGVudChodG1sXzEyM2Q1NTMxMDA1YjRiZTM4ODFmOWYzMWFkNWI0NTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmYjZjZmViM2NiZjQyMjg4OGM2ZGI2MTZiNDk1MmZiLmJpbmRQb3B1cChwb3B1cF9iODczNjUzYzc0MWI0ZmIxYTAyN2QxMmI1YTc5YmQyMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWM2MzBkYTcyMTk0ZDQ4YTJlNGM1YmZiMDcwZmE5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1NzI3NzEwMDczODk1LC03My44ODg0NTE5NjEzNDgwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmU3ZDA4YWQzNjc0ODdlYWNjNWIxNmQ3YTUyZWIzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzZiNTdlYTdlOTY0ZDBjODM0YjlhNDE2NzNkYTA5ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWM2YjU3ZWE3ZTk2NGQwYzgzNGI5YTQxNjczZGEwOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlbG1vbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZTdkMDhhZDM2NzQ4N2VhY2M1YjE2ZDdhNTJlYjM1LnNldENvbnRlbnQoaHRtbF9lYzZiNTdlYTdlOTY0ZDBjODM0YjlhNDE2NzNkYTA5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NWM2MzBkYTcyMTk0ZDQ4YTJlNGM1YmZiMDcwZmE5ZC5iaW5kUG9wdXAocG9wdXBfNjZlN2QwOGFkMzY3NDg3ZWFjYzViMTZkN2E1MmViMzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdjZGYyYWU2YjY2NDMzYmE3ZDZjNzVhZjQzMTI5OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44ODEzOTQ5NzcyNzA4NiwtNzMuOTE3MTkwNDgyMTAzOTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRkOTE5Yjc5YTE5NGQwNzlhMTJhNjEzMDE2MzQ1MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzhmZjA4MmNhY2FmNDZjYzkxYjFmNjMzOWYwMDdjZDQgPSAkKCc8ZGl2IGlkPSJodG1sX2M4ZmYwODJjYWNhZjQ2Y2M5MWIxZjYzMzlmMDA3Y2Q0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TcHV5dGVuIER1eXZpbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDRkOTE5Yjc5YTE5NGQwNzlhMTJhNjEzMDE2MzQ1Mzkuc2V0Q29udGVudChodG1sX2M4ZmYwODJjYWNhZjQ2Y2M5MWIxZjYzMzlmMDA3Y2Q0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM3Y2RmMmFlNmI2NjQzM2JhN2Q2Yzc1YWY0MzEyOThlLmJpbmRQb3B1cChwb3B1cF8wNGQ5MTliNzlhMTk0ZDA3OWExMmE2MTMwMTYzNDUzOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MjQzYWMyYzg4MmI0ZjNhYmIyNDVjZTEyMzFjMGQyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjkwODU0MjgyOTUwNjY2LC03My45MDQ1MzA1NDkwODkyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjJjMTRiNTljNzQ0ZWI2YTQ1ZDRjMTMyOTdkZDQ0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzUzMWY5NzQzOWQ0MjdkYjYyM2E0YzEyZDUwNTk5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTc1MzFmOTc0MzlkNDI3ZGI2MjNhNGMxMmQ1MDU5OWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoIFJpdmVyZGFsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjIyYzE0YjU5Yzc0NGViNmE0NWQ0YzEzMjk3ZGQ0NDcuc2V0Q29udGVudChodG1sX2U3NTMxZjk3NDM5ZDQyN2RiNjIzYTRjMTJkNTA1OTllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyNDNhYzJjODgyYjRmM2FiYjI0NWNlMTIzMWMwZDI3LmJpbmRQb3B1cChwb3B1cF9mMjJjMTRiNTljNzQ0ZWI2YTQ1ZDRjMTMyOTdkZDQ0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTQwYzQ0ZjFhNDk0OGU4YWE0ZjJiODk3NTA4NDk1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1MDY0MTQwOTQwMzM1LC03My44MzIwNzM3ODI0MDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkMzAwODljZDVkMzQ0M2NiOTQwYmY4NzA4M2ZkZWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1YmQ1M2NlYjRkNzQxNGNiYThiZjNhMjFlNjkwMDJhID0gJCgnPGRpdiBpZD0iaHRtbF8yNWJkNTNjZWI0ZDc0MTRjYmE4YmYzYTIxZTY5MDAyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVsaGFtIEJheTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQzMDA4OWNkNWQzNDQzY2I5NDBiZjg3MDgzZmRlY2Iuc2V0Q29udGVudChodG1sXzI1YmQ1M2NlYjRkNzQxNGNiYThiZjNhMjFlNjkwMDJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhNDBjNDRmMWE0OTQ4ZThhYTRmMmI4OTc1MDg0OTViLmJpbmRQb3B1cChwb3B1cF9lZDMwMDg5Y2Q1ZDM0NDNjYjk0MGJmODcwODNmZGVjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjRhYTJiYjFjMTk0N2EwODFiNmIyMmE4YTExNjM0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyNjU3OTUxNjg2OTIyLC03My44MjYyMDI3NTk5NDA3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODhiMjg4MjgxOTU0MWQzYTlmZTNlOWNhMGIyZWM0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODFkODBiZDA0MGM0NzJjYWNjYzA1ZTE2MTM0MTNiMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTgxZDgwYmQwNDBjNDcyY2FjY2MwNWUxNjEzNDEzYjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNjaHV5bGVydmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4OGIyODgyODE5NTQxZDNhOWZlM2U5Y2EwYjJlYzQyLnNldENvbnRlbnQoaHRtbF8xODFkODBiZDA0MGM0NzJjYWNjYzA1ZTE2MTM0MTNiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjRhYTJiYjFjMTk0N2EwODFiNmIyMmE4YTExNjM0NS5iaW5kUG9wdXAocG9wdXBfMjg4YjI4ODI4MTk1NDFkM2E5ZmUzZTljYTBiMmVjNDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTY4YWU1YTE0M2Q2NDU0ZWFkZmJmOTY4MzZhOGI4ODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjE5ODYxMTgxNjM0OTQsLTczLjgxMzg4NTE0NDI4NjE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyNmNmMmQ5MTNhYTRlMjU4MDdiYjJkNTI5YzkyMDBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2NjQ5ODljNTI2MDRjZDI4MmMyMDc1YzdlNGZlMTA5ID0gJCgnPGRpdiBpZD0iaHRtbF9kNjY0OTg5YzUyNjA0Y2QyODJjMjA3NWM3ZTRmZTEwOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWRnZXdhdGVyIFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyNmNmMmQ5MTNhYTRlMjU4MDdiYjJkNTI5YzkyMDBkLnNldENvbnRlbnQoaHRtbF9kNjY0OTg5YzUyNjA0Y2QyODJjMjA3NWM3ZTRmZTEwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNjhhZTVhMTQzZDY0NTRlYWRmYmY5NjgzNmE4Yjg4NS5iaW5kUG9wdXAocG9wdXBfOTI2Y2YyZDkxM2FhNGUyNTgwN2JiMmQ1MjljOTIwMGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzE1MTUzMWJlZGFlNGU3NzhkMzVjMmJhZmE2YmNhMzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MTkwMTQzNzY5ODgzMTQsLTczLjg0ODAyNzI5NTgyNzM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E3M2RlYTJlMGY0MDQzOTliYmQ2MmYzNjAyYTUxNGFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2ODQ3MGZiMGZlMzRlZWI4NjBlZDlmMTBhMjA2NDQ3ID0gJCgnPGRpdiBpZD0iaHRtbF8xNjg0NzBmYjBmZTM0ZWViODYwZWQ5ZjEwYTIwNjQ0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FzdGxlIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3M2RlYTJlMGY0MDQzOTliYmQ2MmYzNjAyYTUxNGFlLnNldENvbnRlbnQoaHRtbF8xNjg0NzBmYjBmZTM0ZWViODYwZWQ5ZjEwYTIwNjQ0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTUxNTMxYmVkYWU0ZTc3OGQzNWMyYmFmYTZiY2EzNS5iaW5kUG9wdXAocG9wdXBfYTczZGVhMmUwZjQwNDM5OWJiZDYyZjM2MDJhNTE0YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjBlY2MwOGE0YjQxNGI2YWIxOWJhZWEyNzk1ODJmNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NzEzNzA3ODE5MjM3MSwtNzMuODYzMzIzNjE2NTI3NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdjZDE5MTY4MzM3NDFjODhlZmM5ODE4ODE4Mzk2ZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQxYzY0OTc1NGM5NDAwMTliNmQ1MjkyNmJiMWUyYzQgPSAkKCc8ZGl2IGlkPSJodG1sXzk0MWM2NDk3NTRjOTQwMDE5YjZkNTI5MjZiYjFlMmM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbGludmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3Y2QxOTE2ODMzNzQxYzg4ZWZjOTgxODgxODM5NmYwLnNldENvbnRlbnQoaHRtbF85NDFjNjQ5NzU0Yzk0MDAxOWI2ZDUyOTI2YmIxZTJjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MGVjYzA4YTRiNDE0YjZhYjE5YmFlYTI3OTU4MmY3MS5iaW5kUG9wdXAocG9wdXBfZjdjZDE5MTY4MzM3NDFjODhlZmM5ODE4ODE4Mzk2ZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTM1MmNkMDY0ZWNhNGM2NTk4YjllN2YzYTg0YmE1NjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NjI5NjU2MjQ3Nzk5OCwtNzMuODQxNjExOTQ4MzEyMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDA0MTg5N2I4YjM2NGNiZGEyNmRkM2Y4ZmNjNjY5NDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGI0NGZhMTBlMjlhNGZmZGJjMDk0MDRlNTAwZWM4Y2MgPSAkKCc8ZGl2IGlkPSJodG1sXzhiNDRmYTEwZTI5YTRmZmRiYzA5NDA0ZTUwMGVjOGNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZWxoYW0gR2FyZGVuczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA0MTg5N2I4YjM2NGNiZGEyNmRkM2Y4ZmNjNjY5NDguc2V0Q29udGVudChodG1sXzhiNDRmYTEwZTI5YTRmZmRiYzA5NDA0ZTUwMGVjOGNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzNTJjZDA2NGVjYTRjNjU5OGI5ZTdmM2E4NGJhNTYyLmJpbmRQb3B1cChwb3B1cF80MDQxODk3YjhiMzY0Y2JkYTI2ZGQzZjhmY2M2Njk0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTU4YzQzNTNiMDg0Mzg3OGM0OWM3MWM3NGY4ODA2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgzNDI4MzgwNzMzODUxLC03My45MTU1ODk0MTc3MzQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ODJhZGY5OTI2ZGI0Y2UyYTcyYmM4NTIxNTU3ZjQxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNzgxMjg0NTAyYTc0ZDQ0YjAzOTg5ZDU0ZjBlOTRlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDc4MTI4NDUwMmE3NGQ0NGIwMzk4OWQ1NGYwZTk0ZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmNvdXJzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODgyYWRmOTkyNmRiNGNlMmE3MmJjODUyMTU1N2Y0MTUuc2V0Q29udGVudChodG1sXzA3ODEyODQ1MDJhNzRkNDRiMDM5ODlkNTRmMGU5NGVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkxNThjNDM1M2IwODQzODc4YzQ5YzcxYzc0Zjg4MDZlLmJpbmRQb3B1cChwb3B1cF84ODJhZGY5OTI2ZGI0Y2UyYTcyYmM4NTIxNTU3ZjQxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTdiNDljZWVjZTE0NGQ0YmRlZDcxYzU1YWJlMTg3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyOTc3NDI5Nzg3MTYxLC03My44NTA1MzUyNDQ1MTkzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTFiN2Q3YWY4ZmM0MzkxYjkzZjZlZDA2NDE5ZDdiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNDE5NWUxMjYzZjE0YzJiODdmZWM3OTZkYTQ3ZGMyMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTQxOTVlMTI2M2YxNGMyYjg3ZmVjNzk2ZGE0N2RjMjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaW9ucG9ydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2UxYjdkN2FmOGZjNDM5MWI5M2Y2ZWQwNjQxOWQ3Yjguc2V0Q29udGVudChodG1sX2U0MTk1ZTEyNjNmMTRjMmI4N2ZlYzc5NmRhNDdkYzIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M1N2I0OWNlZWNlMTQ0ZDRiZGVkNzFjNTVhYmUxODdkLmJpbmRQb3B1cChwb3B1cF9jZTFiN2Q3YWY4ZmM0MzkxYjkzZjZlZDA2NDE5ZDdiOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjMxNWE3NjUyMTE0ZWFkOWVjMmQ0OGM2OThmOTEyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4NDU2MTMwMzAzNzMyLC03My44NDgwODI3MTg3NzE2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZjI1ZDJkN2IwYWE0NzE4YTAyMjc4ZTcwNjBjOTM0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGM4MmQyNDVjY2M0Y2RhOWMxMThmOGFhN2E4Y2IxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhjODJkMjQ1Y2NjNGNkYTljMTE4ZjhhYTdhOGNiMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVkZW53YWxkPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjI1ZDJkN2IwYWE0NzE4YTAyMjc4ZTcwNjBjOTM0MS5zZXRDb250ZW50KGh0bWxfNDhjODJkMjQ1Y2NjNGNkYTljMTE4ZjhhYTdhOGNiMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmIzMTVhNzY1MjExNGVhZDllYzJkNDhjNjk4ZjkxMjQuYmluZFBvcHVwKHBvcHVwXzhmMjVkMmQ3YjBhYTQ3MThhMDIyNzhlNzA2MGM5MzQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwYzk0OTg1MDAxZDRlZjY5NGUzYzc5MTgxYWIxZWJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjI1ODAxMDY1MDEwNjU2LC03NC4wMzA2MjA2OTM1MzgxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzAwNjhlYjA5NWE0MGNiOTIwMmEzMzQwOTA0ODk3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YTg2NTdiNDg2ZTM0NDNhYmM4MjBhNWM3NTQxMjEyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNGE4NjU3YjQ4NmUzNDQzYWJjODIwYTVjNzU0MTIxMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheSBSaWRnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2MwMDY4ZWIwOTVhNDBjYjkyMDJhMzM0MDkwNDg5NzAuc2V0Q29udGVudChodG1sXzRhODY1N2I0ODZlMzQ0M2FiYzgyMGE1Yzc1NDEyMTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwYzk0OTg1MDAxZDRlZjY5NGUzYzc5MTgxYWIxZWJkLmJpbmRQb3B1cChwb3B1cF83YzAwNjhlYjA5NWE0MGNiOTIwMmEzMzQwOTA0ODk3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTJlNTcyODliOWY0NTY1YWI1OGRjZWQzMTZjOTE0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYxMTAwODkwMjAyMDQ0LC03My45OTUxNzk5ODM4MDcyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDlmNjA4YWFhMWM0OTc4ODJhN2Y1ZTViZjAyZjQ0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjM0MWRhZWI1NzU0MDhjODIyYWRlNTdiNWNkZGI2MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDYzNDFkYWViNTc1NDA4YzgyMmFkZTU3YjVjZGRiNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlbnNvbmh1cnN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDlmNjA4YWFhMWM0OTc4ODJhN2Y1ZTViZjAyZjQ0Ni5zZXRDb250ZW50KGh0bWxfZDYzNDFkYWViNTc1NDA4YzgyMmFkZTU3YjVjZGRiNjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGUyZTU3Mjg5YjlmNDU2NWFiNThkY2VkMzE2YzkxNDEuYmluZFBvcHVwKHBvcHVwX2IwOWY2MDhhYWExYzQ5Nzg4MmE3ZjVlNWJmMDJmNDQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyYjBlYTViMjQ3ZDQ3ZDY4NGE2NjE5ODFhYWUzMWJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ1MTAyOTQ5MjU0MjksLTc0LjAxMDMxNjE4NTI3Nzg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzYjM4MmEzYjgxNzQ5Y2E4YTJmMjkxNzc4ODliYWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4OTg2MGRlMWIxOTRlZGE4ZmIzNmZmNDBmNDllYWM0ID0gJCgnPGRpdiBpZD0iaHRtbF9kODk4NjBkZTFiMTk0ZWRhOGZiMzZmZjQwZjQ5ZWFjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3Vuc2V0IFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzYjM4MmEzYjgxNzQ5Y2E4YTJmMjkxNzc4ODliYWJjLnNldENvbnRlbnQoaHRtbF9kODk4NjBkZTFiMTk0ZWRhOGZiMzZmZjQwZjQ5ZWFjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMmIwZWE1YjI0N2Q0N2Q2ODRhNjYxOTgxYWFlMzFiYi5iaW5kUG9wdXAocG9wdXBfYzNiMzgyYTNiODE3NDljYThhMmYyOTE3Nzg4OWJhYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzNkNTRjYjY2NjZhNDBkZmEyYmU4MzJiMmI1NDc1ZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzAyMDA5ODQ4NjQ3LC03My45NTQyNDA5MzEyNzM5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTM3M2EwNWU3NWM0YWVmYjRkZTE3NjQyMjU1MmUyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjA0NzkyNmNlYWU0MjIyOGEyY2YyOGYwYThhYTExNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDYwNDc5MjZjZWFlNDIyMjhhMmNmMjhmMGE4YWExMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVucG9pbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhMzczYTA1ZTc1YzRhZWZiNGRlMTc2NDIyNTUyZTIzLnNldENvbnRlbnQoaHRtbF9kNjA0NzkyNmNlYWU0MjIyOGEyY2YyOGYwYThhYTExNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83M2Q1NGNiNjY2NmE0MGRmYTJiZTgzMmIyYjU0NzVmNC5iaW5kUG9wdXAocG9wdXBfNGEzNzNhMDVlNzVjNGFlZmI0ZGUxNzY0MjI1NTJlMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGY0MjYzM2ZiMjRiNGJiNzliYTk4NjFkMTc3ZjNkZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTUyNjAwMTMwNjU5MywtNzMuOTczNDcwODc3MDg0NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA4NmVlZDM2NzI5NDJmOGFjMTQ1ZjYxYjE5ZWIwZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDk5MGIyNDRkZmEyNGYzY2JkOTdmNDVmMWMzOGM4OWQgPSAkKCc8ZGl2IGlkPSJodG1sX2Q5OTBiMjQ0ZGZhMjRmM2NiZDk3ZjQ1ZjFjMzhjODlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmF2ZXNlbmQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwODZlZWQzNjcyOTQyZjhhYzE0NWY2MWIxOWViMGRkLnNldENvbnRlbnQoaHRtbF9kOTkwYjI0NGRmYTI0ZjNjYmQ5N2Y0NWYxYzM4Yzg5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZjQyNjMzZmIyNGI0YmI3OWJhOTg2MWQxNzdmM2RlNC5iaW5kUG9wdXAocG9wdXBfOTA4NmVlZDM2NzI5NDJmOGFjMTQ1ZjYxYjE5ZWIwZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDM3ZmQwMThjMjFiNGVlNGJiNjQ5OTA4NDc2NjIyOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NzY4MjUwNjU2NjYwNCwtNzMuOTY1MDk0NDg3ODUzMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU3MDNmNGMxOTg2NDgxODgxZTkzZjE1ZjRmZjBjZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjM3MGUxMWRjYTk0NGFiYmFkZDgxNTNmMzRmY2Q0NWYgPSAkKCc8ZGl2IGlkPSJodG1sXzIzNzBlMTFkY2E5NDRhYmJhZGQ4MTUzZjM0ZmNkNDVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CcmlnaHRvbiBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWU3MDNmNGMxOTg2NDgxODgxZTkzZjE1ZjRmZjBjZTcuc2V0Q29udGVudChodG1sXzIzNzBlMTFkY2E5NDRhYmJhZGQ4MTUzZjM0ZmNkNDVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzN2ZkMDE4YzIxYjRlZTRiYjY0OTkwODQ3NjYyMjliLmJpbmRQb3B1cChwb3B1cF9lZTcwM2Y0YzE5ODY0ODE4ODFlOTNmMTVmNGZmMGNlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOGIwMjExN2QwNWI0YzAxOWYwNzIzMzI4ZmJjYjU1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4Njg5MDEyNjc4Mzg0LC03My45NDMxODY0MDQ4Mjk3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Nzg0ZDRjYTYyMzk0Mjk1YjU1YjlkOWI1NWQ5MjRmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MDU1OWNmZTI0ZTc0MTRiYTRkNjBhYTI2NTRkMzA2YyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTA1NTljZmUyNGU3NDE0YmE0ZDYwYWEyNjU0ZDMwNmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoZWVwc2hlYWQgQmF5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Nzg0ZDRjYTYyMzk0Mjk1YjU1YjlkOWI1NWQ5MjRmZC5zZXRDb250ZW50KGh0bWxfOTA1NTljZmUyNGU3NDE0YmE0ZDYwYWEyNjU0ZDMwNmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzhiMDIxMTdkMDViNGMwMTlmMDcyMzMyOGZiY2I1NWYuYmluZFBvcHVwKHBvcHVwXzQ3ODRkNGNhNjIzOTQyOTViNTViOWQ5YjU1ZDkyNGZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzZTdlOGQzMmEyYTQyZjQ4YWE2NWVlNWRiNWJmODc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE0NDMyNTEzMzUwOTgsLTczLjk1NzQzODQwNTU5OTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1YWI2YzYzZDgzNjRhMWFhZmY5MjUyNjM1YWMzM2Y1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ODQwYTI4MjBiNjQ2MWViN2VkYjYzNDg2NmZiMDkzID0gJCgnPGRpdiBpZD0iaHRtbF9hNDg0MGEyODIwYjY0NjFlYjdlZGI2MzQ4NjZmYjA5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFuaGF0dGFuIFRlcnJhY2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1YWI2YzYzZDgzNjRhMWFhZmY5MjUyNjM1YWMzM2Y1LnNldENvbnRlbnQoaHRtbF9hNDg0MGEyODIwYjY0NjFlYjdlZGI2MzQ4NjZmYjA5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xM2U3ZThkMzJhMmE0MmY0OGFhNjVlZTVkYjViZjg3OS5iaW5kUG9wdXAocG9wdXBfYzVhYjZjNjNkODM2NGExYWFmZjkyNTI2MzVhYzMzZjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjVjZDk2NTQ3MGViNGNkOGIzM2MyMTJjNzQ1OTJhN2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzYzMjU4OTAyNjY3NywtNzMuOTU4NDAxMDY1MzM5MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdhOGYyMzBkZGUyNGZhMzk2YzM5ODRhY2M3MjY5MDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWEzZmZmZjI2M2MxNDAyNDliZDVkZTdiODZhYTIwYWUgPSAkKCc8ZGl2IGlkPSJodG1sX2VhM2ZmZmYyNjNjMTQwMjQ5YmQ1ZGU3Yjg2YWEyMGFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GbGF0YnVzaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjdhOGYyMzBkZGUyNGZhMzk2YzM5ODRhY2M3MjY5MDYuc2V0Q29udGVudChodG1sX2VhM2ZmZmYyNjNjMTQwMjQ5YmQ1ZGU3Yjg2YWEyMGFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1Y2Q5NjU0NzBlYjRjZDhiMzNjMjEyYzc0NTkyYTdkLmJpbmRQb3B1cChwb3B1cF9mN2E4ZjIzMGRkZTI0ZmEzOTZjMzk4NGFjYzcyNjkwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZGEyMDExMzQ2YjU0MWJmYjE3Mzk0ZWNmNjgwZjY0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MDgyOTE3Njk1Mjk0LC03My45NDMyOTExOTA3MzU4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZTc0ZjJlMDQ1Y2U0N2ViODYyYzcwMjk2NzA1YTc5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTYxOTViM2FjOTI0YjAxYmQ3M2E0MGVjOTg4MGVlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTk2MTk1YjNhYzkyNGIwMWJkNzNhNDBlYzk4ODBlZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNyb3duIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlNzRmMmUwNDVjZTQ3ZWI4NjJjNzAyOTY3MDVhNzk0LnNldENvbnRlbnQoaHRtbF9hOTYxOTViM2FjOTI0YjAxYmQ3M2E0MGVjOTg4MGVlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZGEyMDExMzQ2YjU0MWJmYjE3Mzk0ZWNmNjgwZjY0YS5iaW5kUG9wdXAocG9wdXBfYWU3NGYyZTA0NWNlNDdlYjg2MmM3MDI5NjcwNWE3OTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWJhNDVkNGY3YjE5NDdmZDk1ZGM3Mzk1ZjBlY2E5Y2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NDE3MTc3NjY2ODk2MSwtNzMuOTM2MTAyNTYxODU4MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjUzN2JmZWI1OTMyNDZjZmJkZDhhMjc5YjgxZmY3ZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODNhZGIwMTJlZTcyNDU4YjgzMjIwYmE2MDdhMTVhYmYgPSAkKCc8ZGl2IGlkPSJodG1sXzgzYWRiMDEyZWU3MjQ1OGI4MzIyMGJhNjA3YTE1YWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IEZsYXRidXNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNTM3YmZlYjU5MzI0NmNmYmRkOGEyNzliODFmZjdmZC5zZXRDb250ZW50KGh0bWxfODNhZGIwMTJlZTcyNDU4YjgzMjIwYmE2MDdhMTVhYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWJhNDVkNGY3YjE5NDdmZDk1ZGM3Mzk1ZjBlY2E5Y2MuYmluZFBvcHVwKHBvcHVwX2Y1MzdiZmViNTkzMjQ2Y2ZiZGQ4YTI3OWI4MWZmN2ZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzM2U0ZTI3OWY3ODRmNzBiNmQ5OWNiOGE0ZTFjYTFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQyMzgxOTU4MDAzNTI2LC03My45ODA0MjExMDU1OTQ3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDBhZWZmYzQ5MDg0MzAxYmJlOGY4NDg2MzQ3YjVkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzY0NjRhMzFmOGU0ZWRlYmQ4ZTdlNDhjYTJhMGI5MSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2M2NDY0YTMxZjhlNGVkZWJkOGU3ZTQ4Y2EyYTBiOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktlbnNpbmd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkMGFlZmZjNDkwODQzMDFiYmU4Zjg0ODYzNDdiNWRjLnNldENvbnRlbnQoaHRtbF9jYzY0NjRhMzFmOGU0ZWRlYmQ4ZTdlNDhjYTJhMGI5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzNlNGUyNzlmNzg0ZjcwYjZkOTljYjhhNGUxY2ExZS5iaW5kUG9wdXAocG9wdXBfNmQwYWVmZmM0OTA4NDMwMWJiZThmODQ4NjM0N2I1ZGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTkyNjU5YWY4Mzk1NDgwYzhlNDgwYWU3YmQxOGM4NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTY5NDU4MzU3NTEwNCwtNzMuOTgwMDczNDA0MzAxNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGYyMTkyYjUzMzJkNDJhOWFkZDM5YzBjMzQwNGE1NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjdhNjliNGI2MDZjNGNhZWE4ZDVhZWU5NTgzN2ViOTQgPSAkKCc8ZGl2IGlkPSJodG1sXzI3YTY5YjRiNjA2YzRjYWVhOGQ1YWVlOTU4MzdlYjk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaW5kc29yIFRlcnJhY2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmMjE5MmI1MzMyZDQyYTlhZGQzOWMwYzM0MDRhNTQ1LnNldENvbnRlbnQoaHRtbF8yN2E2OWI0YjYwNmM0Y2FlYThkNWFlZTk1ODM3ZWI5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OTI2NTlhZjgzOTU0ODBjOGU0ODBhZTdiZDE4Yzg3Mi5iaW5kUG9wdXAocG9wdXBfMGYyMTkyYjUzMzJkNDJhOWFkZDM5YzBjMzQwNGE1NDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTA3ZGE2NjUyYmEyNDIzM2FhZGRiYTViOWVmZGM3NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzY4MjIyNjIyNTQ3MjQsLTczLjk2NDg1OTI0MjYyNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjRjZTBiZTQ2MTVmNGNlNzg4NDA5NzY1ZWIxMzUxMjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGRhYWEzNDRlYjY2NGNiMzlhMzU1NTNiNDU1NDg4YTQgPSAkKCc8ZGl2IGlkPSJodG1sXzRkYWFhMzQ0ZWI2NjRjYjM5YTM1NTUzYjQ1NTQ4OGE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qcm9zcGVjdCBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNGNlMGJlNDYxNWY0Y2U3ODg0MDk3NjVlYjEzNTEyNi5zZXRDb250ZW50KGh0bWxfNGRhYWEzNDRlYjY2NGNiMzlhMzU1NTNiNDU1NDg4YTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTA3ZGE2NjUyYmEyNDIzM2FhZGRiYTViOWVmZGM3NGMuYmluZFBvcHVwKHBvcHVwXzI0Y2UwYmU0NjE1ZjRjZTc4ODQwOTc2NWViMTM1MTI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3ODRjMDNmZmE4YjRkZTRhNDIxMTA0NDJiOTMxMjUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjYzOTQ5OTQzMzk3NTUsLTczLjkxMDIzNTM2MTc2NjA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljNTQ3MDYwZGJiNDRhNzI4NjRjYmYzNTBhZTIyNDAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1MGY2NTUwMDNmYjQ4OGZiYzQ4NzJlNWE3NGFkZDBiID0gJCgnPGRpdiBpZD0iaHRtbF8wNTBmNjU1MDAzZmI0ODhmYmM0ODcyZTVhNzRhZGQwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvd25zdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljNTQ3MDYwZGJiNDRhNzI4NjRjYmYzNTBhZTIyNDAzLnNldENvbnRlbnQoaHRtbF8wNTBmNjU1MDAzZmI0ODhmYmM0ODcyZTVhNzRhZGQwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Nzg0YzAzZmZhOGI0ZGU0YTQyMTEwNDQyYjkzMTI1MC5iaW5kUG9wdXAocG9wdXBfOWM1NDcwNjBkYmI0NGE3Mjg2NGNiZjM1MGFlMjI0MDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWEyYjhiNDAzMTk4NDU5MjlkN2FjZWJiZDBkYzgxYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDcxNDQzOTM0NDI1MSwtNzMuOTU4MTE1MjkyMjA5MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc1ZDljMjIxMzk0NDUyM2I0ZmYzOTAwYzFlZWI1NDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmUwNzcxNmE4ZTNlNDE2MmIzYTFkZTA3MTQzYmMyODUgPSAkKCc8ZGl2IGlkPSJodG1sXzJlMDc3MTZhOGUzZTQxNjJiM2ExZGUwNzE0M2JjMjg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxsaWFtc2J1cmc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3NWQ5YzIyMTM5NDQ1MjNiNGZmMzkwMGMxZWViNTQ4LnNldENvbnRlbnQoaHRtbF8yZTA3NzE2YThlM2U0MTYyYjNhMWRlMDcxNDNiYzI4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYTJiOGI0MDMxOTg0NTkyOWQ3YWNlYmJkMGRjODFiNC5iaW5kUG9wdXAocG9wdXBfNzc1ZDljMjIxMzk0NDUyM2I0ZmYzOTAwYzFlZWI1NDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDVkY2Y3Mzc1MDIxNDVkZDkxMDFjM2UyMzY1ODM5YzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTgxMTYxMTAxNzkwMSwtNzMuOTI1MjU3OTc0ODcwNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzU5NTRjZDA0YmU5NDNiMGE5YjdmYWYxM2M0Yjk0MzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBlOTdjZDEwYWE1NDJiOWE2ZWQyMWU3MGY2MzE4YWYgPSAkKCc8ZGl2IGlkPSJodG1sX2UwZTk3Y2QxMGFhNTQyYjlhNmVkMjFlNzBmNjMxOGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CdXNod2ljazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzU5NTRjZDA0YmU5NDNiMGE5YjdmYWYxM2M0Yjk0MzYuc2V0Q29udGVudChodG1sX2UwZTk3Y2QxMGFhNTQyYjlhNmVkMjFlNzBmNjMxOGFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1ZGNmNzM3NTAyMTQ1ZGQ5MTAxYzNlMjM2NTgzOWM0LmJpbmRQb3B1cChwb3B1cF83NTk1NGNkMDRiZTk0M2IwYTliN2ZhZjEzYzRiOTQzNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjEzNTQ2ZWU4YjY0Mjk1YWU1NmZjNDY3YzQ4ZDk5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzIzMTYwNzcyMDQ1NiwtNzMuOTQxNzg0ODg2OTAyOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWUzMGU0NDYzYWNlNDIyMWE1NzQ2NGJiOGNkZDgyNmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDE5ZGFhYWIzNDE2NGVlZDljNTUyNzkxZDAxYTE0NTQgPSAkKCc8ZGl2IGlkPSJodG1sXzQxOWRhYWFiMzQxNjRlZWQ5YzU1Mjc5MWQwMWExNDU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWRmb3JkIFN0dXl2ZXNhbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllMzBlNDQ2M2FjZTQyMjFhNTc0NjRiYjhjZGQ4MjZmLnNldENvbnRlbnQoaHRtbF80MTlkYWFhYjM0MTY0ZWVkOWM1NTI3OTFkMDFhMTQ1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYjEzNTQ2ZWU4YjY0Mjk1YWU1NmZjNDY3YzQ4ZDk5Mi5iaW5kUG9wdXAocG9wdXBfOWUzMGU0NDYzYWNlNDIyMWE1NzQ2NGJiOGNkZDgyNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTgxNzdiY2ZmZTA1NGNiMmIxZWE5N2VkNjFiYjAwZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTU4NjM3MjI3MjQwODQsLTczLjk5Mzc4MjI1NDk2NDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyZDYzNDQ2MzRkNjRiYzE5ZWI5NTBjZTdjMTBhY2NlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwOWQwOWFjOGQ3YzRlNDE4NjE4NGUwZGQyYzhlMWM2ID0gJCgnPGRpdiBpZD0iaHRtbF81MDlkMDlhYzhkN2M0ZTQxODYxODRlMGRkMmM4ZTFjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvb2tseW4gSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTJkNjM0NDYzNGQ2NGJjMTllYjk1MGNlN2MxMGFjY2Uuc2V0Q29udGVudChodG1sXzUwOWQwOWFjOGQ3YzRlNDE4NjE4NGUwZGQyYzhlMWM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4MTc3YmNmZmUwNTRjYjJiMWVhOTdlZDYxYmIwMGUyLmJpbmRQb3B1cChwb3B1cF8xMmQ2MzQ0NjM0ZDY0YmMxOWViOTUwY2U3YzEwYWNjZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZWM2MWRkMTgwOWY0MGEyYTNhOWZjM2RhMjRmOTdmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzkxOTcyMjQ4NTU3NCwtNzMuOTk4NTYxMzkyMTg0NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjFjODA1ZjIxZjAyNDM4ZGI3MmNlMTJmMjQ3N2NhMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGNlZGMxOTY3ZDYxNDFjNzliZjdkNzdhMDdlMmYyODYgPSAkKCc8ZGl2IGlkPSJodG1sX2RjZWRjMTk2N2Q2MTQxYzc5YmY3ZDc3YTA3ZTJmMjg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2JibGUgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjFjODA1ZjIxZjAyNDM4ZGI3MmNlMTJmMjQ3N2NhMTguc2V0Q29udGVudChodG1sX2RjZWRjMTk2N2Q2MTQxYzc5YmY3ZDc3YTA3ZTJmMjg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JlYzYxZGQxODA5ZjQwYTJhM2E5ZmMzZGEyNGY5N2ZiLmJpbmRQb3B1cChwb3B1cF8yMWM4MDVmMjFmMDI0MzhkYjcyY2UxMmYyNDc3Y2ExOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZTdlMmY0ZGVkZjY0ZDVlOWQ1ODg0MjM2ODk1ZDUwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDU0MDIzMTA3NjQ4NSwtNzMuOTk0NjUzNzI4MjgwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE0ZDk1NmMwM2ZjNDAwODg0ZjBhYjVjYTlkOGJkMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmMwYWU5YzAyMzEwNDlmYjg2OTgyZDkyODcxZmQ0ZWEgPSAkKCc8ZGl2IGlkPSJodG1sX2JjMGFlOWMwMjMxMDQ5ZmI4Njk4MmQ5Mjg3MWZkNGVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIEdhcmRlbnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxNGQ5NTZjMDNmYzQwMDg4NGYwYWI1Y2E5ZDhiZDAxLnNldENvbnRlbnQoaHRtbF9iYzBhZTljMDIzMTA0OWZiODY5ODJkOTI4NzFmZDRlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZTdlMmY0ZGVkZjY0ZDVlOWQ1ODg0MjM2ODk1ZDUwMi5iaW5kUG9wdXAocG9wdXBfMzE0ZDk1NmMwM2ZjNDAwODg0ZjBhYjVjYTlkOGJkMDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGE0MTRmNzk3OWEzNGNkNmE2ZjE0ODc1ZjgxOGYwMDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzYyNTMyMzAyNTA4ODYsLTc0LjAxMjc1ODk3NDczNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTczNmNhYjFhODA0NDZmZTg2NDAyOGFjOGM1MjhmOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTk2ODU4N2U5N2I4NDk5NWFhNGVlN2IwNTQ1NWZjNjIgPSAkKCc8ZGl2IGlkPSJodG1sXzU5Njg1ODdlOTdiODQ5OTVhYTRlZTdiMDU0NTVmYzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SZWQgSG9vazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTczNmNhYjFhODA0NDZmZTg2NDAyOGFjOGM1MjhmOWUuc2V0Q29udGVudChodG1sXzU5Njg1ODdlOTdiODQ5OTVhYTRlZTdiMDU0NTVmYzYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhNDE0Zjc5NzlhMzRjZDZhNmYxNDg3NWY4MThmMDAxLmJpbmRQb3B1cChwb3B1cF9hNzM2Y2FiMWE4MDQ0NmZlODY0MDI4YWM4YzUyOGY5ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjhkMDMxZDU2NjY0M2QxOGYwNWRmYTYxOWQ4NzZhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MzkzMTE0MzE4NzE1NCwtNzMuOTk0NDQwODcxNDUzMzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGMwZGQ4YWYxYWQ3NDdkNGIxMzIyN2MwYzg0ODBmMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTVkNmJhMjJhM2ZmNDU3MzljNTZkZTAyOGZkZTFkODIgPSAkKCc8ZGl2IGlkPSJodG1sX2E1ZDZiYTIyYTNmZjQ1NzM5YzU2ZGUwMjhmZGUxZDgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Hb3dhbnVzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzBkZDhhZjFhZDc0N2Q0YjEzMjI3YzBjODQ4MGYxNC5zZXRDb250ZW50KGh0bWxfYTVkNmJhMjJhM2ZmNDU3MzljNTZkZTAyOGZkZTFkODIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWY4ZDAzMWQ1NjY2NDNkMThmMDVkZmE2MTlkODc2YTQuYmluZFBvcHVwKHBvcHVwXzBjMGRkOGFmMWFkNzQ3ZDRiMTMyMjdjMGM4NDgwZjE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjMTczZWU3NjhiYjQ1ODBhODk3MTcwMDhiY2I5MzVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg4NTI3MjYwMTg5NzcsLTczLjk3MjkwNTc0MzY5MDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5NjAxNzI2YzhlYzRiOGY5MDE5YjVlNmZmOTZhYjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzOTM3YjU0OTZhZjQ3ZjBiMTA5MjEyOTM5N2M3ZjljID0gJCgnPGRpdiBpZD0iaHRtbF80MzkzN2I1NDk2YWY0N2YwYjEwOTIxMjkzOTdjN2Y5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9ydCBHcmVlbmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5NjAxNzI2YzhlYzRiOGY5MDE5YjVlNmZmOTZhYjE1LnNldENvbnRlbnQoaHRtbF80MzkzN2I1NDk2YWY0N2YwYjEwOTIxMjkzOTdjN2Y5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYzE3M2VlNzY4YmI0NTgwYTg5NzE3MDA4YmNiOTM1Yy5iaW5kUG9wdXAocG9wdXBfNjk2MDE3MjZjOGVjNGI4ZjkwMTliNWU2ZmY5NmFiMTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg5N2ZjYmQ0MDhiNDhlODg5Y2Q5ZTg0YTRkNzQ5N2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzIzMjA1MjI2ODE5NywtNzMuOTc3MDUwMzAxODM5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTE2YzQzYWEyOTM2NDhiYTk5ZDBkYWZhNTY3ZjkzYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjhhY2U2NzIyYmNkNDgzNmIzZjhmMDM2YTY5NzJhNjMgPSAkKCc8ZGl2IGlkPSJodG1sXzI4YWNlNjcyMmJjZDQ4MzZiM2Y4ZjAzNmE2OTcyYTYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrIFNsb3BlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTZjNDNhYTI5MzY0OGJhOTlkMGRhZmE1NjdmOTNiZS5zZXRDb250ZW50KGh0bWxfMjhhY2U2NzIyYmNkNDgzNmIzZjhmMDM2YTY5NzJhNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjg5N2ZjYmQ0MDhiNDhlODg5Y2Q5ZTg0YTRkNzQ5N2QuYmluZFBvcHVwKHBvcHVwX2ExNmM0M2FhMjkzNjQ4YmE5OWQwZGFmYTU2N2Y5M2JlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmNmUzM2QwZDFhMzQ2YTk5YTk3MmFiYTE3ZjU4ZWNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyMzkxMDExNDQyMTEsLTczLjg3NjYxNTk2NDU3Mjk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2OTRiNWE5ZTFkZjQ4ZGVhZGNkYTFkOTVjZjgyNTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzNjc5OGFlMTg4NTRiYjE5YzM2NTE3OTZmNTdmNWY1ID0gJCgnPGRpdiBpZD0iaHRtbF9lMzY3OThhZTE4ODU0YmIxOWMzNjUxNzk2ZjU3ZjVmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q3lwcmVzcyBIaWxsczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY5NGI1YTllMWRmNDhkZWFkY2RhMWQ5NWNmODI1N2Muc2V0Q29udGVudChodG1sX2UzNjc5OGFlMTg4NTRiYjE5YzM2NTE3OTZmNTdmNWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmNmUzM2QwZDFhMzQ2YTk5YTk3MmFiYTE3ZjU4ZWNhLmJpbmRQb3B1cChwb3B1cF85Njk0YjVhOWUxZGY0OGRlYWRjZGExZDk1Y2Y4MjU3Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDRlODNjZjcxYjM0MmI2YmI4ZDI1NmNiMDkxMmQwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2OTkyNTcwMDg0NzA0NSwtNzMuODgwNjk4NjM5MTczNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M3N2JjOTg1ZGEzNDM5ZmE5NGNjYzY2OTU0ZWUzZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjgwNjdmMzE4MTJkNDM4Y2FkMDdhNzgwOWJkOTcxYWQgPSAkKCc8ZGl2IGlkPSJodG1sX2I4MDY3ZjMxODEyZDQzOGNhZDA3YTc4MDliZDk3MWFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IE5ldyBZb3JrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Yzc3YmM5ODVkYTM0MzlmYTk0Y2NjNjY5NTRlZTNmYi5zZXRDb250ZW50KGh0bWxfYjgwNjdmMzE4MTJkNDM4Y2FkMDdhNzgwOWJkOTcxYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmQ0ZTgzY2Y3MWIzNDJiNmJiOGQyNTZjYjA5MTJkMDEuYmluZFBvcHVwKHBvcHVwXzdjNzdiYzk4NWRhMzQzOWZhOTRjY2M2Njk1NGVlM2ZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiZTcxNGM4YjhkYTQzZjZhMGYwMTFmMDM0MzA0YTU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ3NTg5MDUyMzA4NzQsLTczLjg3OTM2OTcwMDQ1ODc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3NTVhMjJkMzE1NDRkNmVhMmU2MzNhYWZjMmUxMDdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViZGU4ZWU0M2MzMzQ0NzNhMTRmZGM5MmZjZjg4MjRmID0gJCgnPGRpdiBpZD0iaHRtbF9lYmRlOGVlNDNjMzM0NDczYTE0ZmRjOTJmY2Y4ODI0ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhcnJldHQgQ2l0eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc1NWEyMmQzMTU0NGQ2ZWEyZTYzM2FhZmMyZTEwN2Uuc2V0Q29udGVudChodG1sX2ViZGU4ZWU0M2MzMzQ0NzNhMTRmZGM5MmZjZjg4MjRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiZTcxNGM4YjhkYTQzZjZhMGYwMTFmMDM0MzA0YTU2LmJpbmRQb3B1cChwb3B1cF84NzU1YTIyZDMxNTQ0ZDZlYTJlNjMzYWFmYzJlMTA3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDM0ZmFkYTczOWI0N2E5YmZiM2NiYzY3NmYyNDRkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzNTU2NDMyNzk3NDI4LC03My45MDIwOTI2OTc3ODk2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZjViZGU3YTBmZmE0Nzg0OTVlMmQ5YjA5MWUzM2U1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGE5NWUxYzY4NDA0MzdiYjI1NmU4ODgzZDRkNzNmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhhOTVlMWM2ODQwNDM3YmIyNTZlODg4M2Q0ZDczZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhbmFyc2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjViZGU3YTBmZmE0Nzg0OTVlMmQ5YjA5MWUzM2U1NS5zZXRDb250ZW50KGh0bWxfNDhhOTVlMWM2ODQwNDM3YmIyNTZlODg4M2Q0ZDczZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQzNGZhZGE3MzliNDdhOWJmYjNjYmM2NzZmMjQ0ZDAuYmluZFBvcHVwKHBvcHVwXzJmNWJkZTdhMGZmYTQ3ODQ5NWUyZDliMDkxZTMzZTU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiMDk4MGFlMDE4MzRmZWFhOTkzMjY2NzQ1ZjQ2ZDhlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMwNDQ2MDQzNzU3NDY2LC03My45MjkxMTMwMjY0NDY3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTk1MTM2MTc3NzY0MDhjOTY3MjQ4YjA5OGYxM2VlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lY2EyNGVhNTI1MGQ0MzdiOWZjYzJmY2VkNWUzZWQ1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWNhMjRlYTUyNTBkNDM3YjlmY2MyZmNlZDVlM2VkNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZsYXRsYW5kczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE5NTEzNjE3Nzc2NDA4Yzk2NzI0OGIwOThmMTNlZTIuc2V0Q29udGVudChodG1sX2VjYTI0ZWE1MjUwZDQzN2I5ZmNjMmZjZWQ1ZTNlZDUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiMDk4MGFlMDE4MzRmZWFhOTkzMjY2NzQ1ZjQ2ZDhlLmJpbmRQb3B1cChwb3B1cF81MTk1MTM2MTc3NzY0MDhjOTY3MjQ4YjA5OGYxM2VlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWExN2NkYjUxNzQ0NWVjOWE4NzMzY2UxYjgyOGM4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwNjMzNjQyMTY4NTYyNiwtNzMuOTA4MTg1NzE3Nzc0MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2YwYzFlYWFmNWQxNGE4NGE5YTRhODg3MjEzZGY3MGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmMyYTFiMTZjNmJhNDg1Y2I4MjE4NzkzYWM0Yzg3NjIgPSAkKCc8ZGl2IGlkPSJodG1sXzJjMmExYjE2YzZiYTQ4NWNiODIxODc5M2FjNGM4NzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWxsIElzbGFuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2YwYzFlYWFmNWQxNGE4NGE5YTRhODg3MjEzZGY3MGQuc2V0Q29udGVudChodG1sXzJjMmExYjE2YzZiYTQ4NWNiODIxODc5M2FjNGM4NzYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1YTE3Y2RiNTE3NDQ1ZWM5YTg3MzNjZTFiODI4YzgzLmJpbmRQb3B1cChwb3B1cF8zZjBjMWVhYWY1ZDE0YTg0YTlhNGE4ODcyMTNkZjcwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZGY1NDM0ZWY3NjQ0MmMxODhhMGFlNjJkZmIwZmM3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NzkxMzUwMzA4NjU3LC03My45NDM1MzcyMjg5MTg4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNTljYmRhY2E3NGY0ODQ3OWE5ODMzMzllNjZhOGIxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZGZkMjYzMmZmMWM0NTE2YWVlMjliMTdhYjE1YTcyNCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGRmZDI2MzJmZjFjNDUxNmFlZTI5YjE3YWIxNWE3MjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbmhhdHRhbiBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTU5Y2JkYWNhNzRmNDg0NzlhOTgzMzM5ZTY2YThiMWEuc2V0Q29udGVudChodG1sXzhkZmQyNjMyZmYxYzQ1MTZhZWUyOWIxN2FiMTVhNzI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkZjU0MzRlZjc2NDQyYzE4OGEwYWU2MmRmYjBmYzdhLmJpbmRQb3B1cChwb3B1cF9lNTljYmRhY2E3NGY0ODQ3OWE5ODMzMzllNjZhOGIxYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTFkNjY4YjI3ZDQ0NDk3OTdmYjBjNTU2YjgxZDUzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NDI5MjU2NDcxNjAxLC03My45ODg2ODI5NTgyMTYzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNjVjMGY3ZGE1ZTQ0Mjc2ODIzOTllMjdhNmQ1YmI2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjIxM2YxOTE1NDg0ZjI1YWQwOWY4YWJhZjU5ZmU1MCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGYyMTNmMTkxNTQ4NGYyNWFkMDlmOGFiYWY1OWZlNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmV5IElzbGFuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY1YzBmN2RhNWU0NDI3NjgyMzk5ZTI3YTZkNWJiNjQuc2V0Q29udGVudChodG1sX2RmMjEzZjE5MTU0ODRmMjVhZDA5ZjhhYmFmNTlmZTUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1MWQ2NjhiMjdkNDQ0OTc5N2ZiMGM1NTZiODFkNTNhLmJpbmRQb3B1cChwb3B1cF9kNjVjMGY3ZGE1ZTQ0Mjc2ODIzOTllMjdhNmQ1YmI2NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NWZhYzFiOWQxN2U0NGM5OWUyYWI1MWI4MGJjNDI2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5OTUxODcwMjgyMjM4LC03My45OTg3NTIyMTQ0MzUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzZhYWYzYmI0YjE0ZDcyYjQzNWEzYWMxZDBhNThiMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTY4MmM3MmY5ZDI0OGQ2YjIxMDZjYzVlYjA1YTY3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTk2ODJjNzJmOWQyNDhkNmIyMTA2Y2M1ZWIwNWE2NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhdGggQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzNmFhZjNiYjRiMTRkNzJiNDM1YTNhYzFkMGE1OGIwLnNldENvbnRlbnQoaHRtbF9hOTY4MmM3MmY5ZDI0OGQ2YjIxMDZjYzVlYjA1YTY3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NWZhYzFiOWQxN2U0NGM5OWUyYWI1MWI4MGJjNDI2Yi5iaW5kUG9wdXAocG9wdXBfZTM2YWFmM2JiNGIxNGQ3MmI0MzVhM2FjMWQwYTU4YjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDk0NWJjMGMwNmUxNDc2NzgzNWMxNWExYzlhN2RjZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzMxMzA1MTI3NTgwMTUsLTczLjk5MDQ5ODIzMDQ0ODExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4N2YyYjRmNzM4ZjRiYmM5NGQ2N2E4Y2IxOGYxNTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyNmM0ZmQ1YTU2YzQxYjFiOTEzNGUzNTEzYjMzMzk5ID0gJCgnPGRpdiBpZD0iaHRtbF9lMjZjNGZkNWE1NmM0MWIxYjkxMzRlMzUxM2IzMzM5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qm9yb3VnaCBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODdmMmI0ZjczOGY0YmJjOTRkNjdhOGNiMThmMTU3Mi5zZXRDb250ZW50KGh0bWxfZTI2YzRmZDVhNTZjNDFiMWI5MTM0ZTM1MTNiMzMzOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDk0NWJjMGMwNmUxNDc2NzgzNWMxNWExYzlhN2RjZGMuYmluZFBvcHVwKHBvcHVwXzg4N2YyYjRmNzM4ZjRiYmM5NGQ2N2E4Y2IxOGYxNTcyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkMTUyNmY1NGNkNjRkNzU4YTA4ZTNjYWNiYWU4ZDRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE5MjE5NDU3NzIyNjM2LC03NC4wMTkzMTM3NTYzNjAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZmYzN2U1OTg3MDQ0MTMwYTk3ZjNjZWY0ODU1NjQ2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYzg0ZDU0ZTZiYjY0NGIxODVmMGFmY2RiNzQ4YjA1MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMmM4NGQ1NGU2YmI2NDRiMTg1ZjBhZmNkYjc0OGIwNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkR5a2VyIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VmZjM3ZTU5ODcwNDQxMzBhOTdmM2NlZjQ4NTU2NDYzLnNldENvbnRlbnQoaHRtbF8yYzg0ZDU0ZTZiYjY0NGIxODVmMGFmY2RiNzQ4YjA1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDE1MjZmNTRjZDY0ZDc1OGEwOGUzY2FjYmFlOGQ0Yy5iaW5kUG9wdXAocG9wdXBfZWZmMzdlNTk4NzA0NDEzMGE5N2YzY2VmNDg1NTY0NjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWUyOWFkYjQ4NTBkNDgwODljMzgxYjk5YWQ2ODMyM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTA4NDg0MzM5MDIwNDYsLTczLjkzMDEwMTcwNjkxMTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkNmQwOTc1Njk1YzQ3NjQ5YzkwODQ0ODIxOWRiMjVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2YTZkMWVlMGRlYzRmMWY4NWFhMDQ0NDRiMmRlNTYyID0gJCgnPGRpdiBpZD0iaHRtbF85NmE2ZDFlZTBkZWM0ZjFmODVhYTA0NDQ0YjJkZTU2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2Vycml0c2VuIEJlYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDZkMDk3NTY5NWM0NzY0OWM5MDg0NDgyMTlkYjI1ZC5zZXRDb250ZW50KGh0bWxfOTZhNmQxZWUwZGVjNGYxZjg1YWEwNDQ0NGIyZGU1NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWUyOWFkYjQ4NTBkNDgwODljMzgxYjk5YWQ2ODMyM2EuYmluZFBvcHVwKHBvcHVwX2RkNmQwOTc1Njk1YzQ3NjQ5YzkwODQ0ODIxOWRiMjVkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3NzU5Y2JiNTEzYTQ1MTdhMjU2MGQ1Y2NjMjIwZjEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjA5NzQ3Nzc5ODk0NjA0LC03My45MzEzNDQwNDEwODQ5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDQ1Y2MyNWZlYjE0NDMwYWY0ZWUwMWEwNTMzZDY2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNmZhOTI0ZmVkMjU0ZmZhOTMyMjk5NTkwMWJhYmRlNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjZmYTkyNGZlZDI1NGZmYTkzMjI5OTU5MDFiYWJkZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmluZSBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDQ1Y2MyNWZlYjE0NDMwYWY0ZWUwMWEwNTMzZDY2Yi5zZXRDb250ZW50KGh0bWxfYjZmYTkyNGZlZDI1NGZmYTkzMjI5OTU5MDFiYWJkZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTc3NTljYmI1MTNhNDUxN2EyNTYwZDVjY2MyMjBmMTIuYmluZFBvcHVwKHBvcHVwXzM0NDVjYzI1ZmViMTQ0MzBhZjRlZTAxYTA1MzNkNjZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1ZTY5NTIxNjQwMzQ0NzY5ZDZiM2ViMTM3NGJiZDA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkzMjI5NDIxODgxNTA0LC03My45Njc4NDMwNjIxNjM2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDg2MTdiM2NkMjQ0NTkwYWVlZTRiMzhjYWU4ZDcyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDczOGE4OGI2MjE0YzE2ODM1NTUwNzRhZmQ1MzRlNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTA3MzhhODhiNjIxNGMxNjgzNTU1MDc0YWZkNTM0ZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQ4NjE3YjNjZDI0NDU5MGFlZWU0YjM4Y2FlOGQ3MjUuc2V0Q29udGVudChodG1sXzEwNzM4YTg4YjYyMTRjMTY4MzU1NTA3NGFmZDUzNGU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY1ZTY5NTIxNjQwMzQ0NzY5ZDZiM2ViMTM3NGJiZDA5LmJpbmRQb3B1cChwb3B1cF80ZDg2MTdiM2NkMjQ0NTkwYWVlZTRiMzhjYWU4ZDcyNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODFiYWI2ZTQxYmQ0NGU0OTQ0YjI4ZDQ4MTVkMTc3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NjM3NTM3ODkwMjI0LC03NC4wMDc4NzMxMTIwMDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3YTI5MTMzMjZlMTQzNjU4Y2YxOTRiMzliMDc2OGQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1OThiNjQ2MmVlNTQ2MDU5OGJkYjg5NzFmNDUwOGY4ID0gJCgnPGRpdiBpZD0iaHRtbF80NTk4YjY0NjJlZTU0NjA1OThiZGI4OTcxZjQ1MDhmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2VhIEdhdGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3YTI5MTMzMjZlMTQzNjU4Y2YxOTRiMzliMDc2OGQwLnNldENvbnRlbnQoaHRtbF80NTk4YjY0NjJlZTU0NjA1OThiZGI4OTcxZjQ1MDhmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wODFiYWI2ZTQxYmQ0NGU0OTQ0YjI4ZDQ4MTVkMTc3Ni5iaW5kUG9wdXAocG9wdXBfNjdhMjkxMzMyNmUxNDM2NThjZjE5NGIzOWIwNzY4ZDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzdiMDA4N2MzZWE3NDgyY2FjYWQ5YWVlNTA4ZmZkNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTA4NDQwMjEwOTgwMiwtNzMuOTgzNDYzMzc0MzEwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDA1MDZjZDc5ZWYxNDYyNWEzMThiZjJmN2I5ZGVhZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNjYmQ3M2Y5OTNjNDk5M2JlYTYwZjMwNDYzM2Y5ZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzEzY2JkNzNmOTkzYzQ5OTNiZWE2MGYzMDQ2MzNmOWQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb3dudG93bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA1MDZjZDc5ZWYxNDYyNWEzMThiZjJmN2I5ZGVhZjUuc2V0Q29udGVudChodG1sXzEzY2JkNzNmOTkzYzQ5OTNiZWE2MGYzMDQ2MzNmOWQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3YjAwODdjM2VhNzQ4MmNhY2FkOWFlZTUwOGZmZDVjLmJpbmRQb3B1cChwb3B1cF80MDUwNmNkNzllZjE0NjI1YTMxOGJmMmY3YjlkZWFmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZWIwYmE0MDRmMDg0NTViYThkMGVlMWY3MWNhODEwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NTY4MjkxMjA5MTQ0NCwtNzMuOTgzNzQ4MjQxMTU3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDliMDVlMDA3NjljNDVlMjg2MWZiZmU3YzUyNjAwMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDIxYTg5ZTZiYzgyNGVkMDkwNjBkNTlkOGExMzNjNzAgPSAkKCc8ZGl2IGlkPSJodG1sXzAyMWE4OWU2YmM4MjRlZDA5MDYwZDU5ZDhhMTMzYzcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb2VydW0gSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDliMDVlMDA3NjljNDVlMjg2MWZiZmU3YzUyNjAwMDkuc2V0Q29udGVudChodG1sXzAyMWE4OWU2YmM4MjRlZDA5MDYwZDU5ZDhhMTMzYzcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlYjBiYTQwNGYwODQ1NWJhOGQwZWUxZjcxY2E4MTBmLmJpbmRQb3B1cChwb3B1cF8wOWIwNWUwMDc2OWM0NWUyODYxZmJmZTdjNTI2MDAwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjVmNzMyZTM0NWU0MDViYmY1ZTUzMWZlNTAyMzU5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY1ODQyMDAxNzQ2OTgxNSwtNzMuOTU0ODk4NjcwNzc3MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTM3Y2Q3N2E0OGRlNGNhZmE4YTNjMGYzNDExMTQ0YjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2M1ZWM0NzU0NzYyNGU1YTgzNzg5MTRlNzFjMzM5MWEgPSAkKCc8ZGl2IGlkPSJodG1sXzNjNWVjNDc1NDc2MjRlNWE4Mzc4OTE0ZTcxYzMzOTFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qcm9zcGVjdCBMZWZmZXJ0cyBHYXJkZW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMzdjZDc3YTQ4ZGU0Y2FmYThhM2MwZjM0MTExNDRiMi5zZXRDb250ZW50KGh0bWxfM2M1ZWM0NzU0NzYyNGU1YTgzNzg5MTRlNzFjMzM5MWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGY1ZjczMmUzNDVlNDA1YmJmNWU1MzFmZTUwMjM1OTguYmluZFBvcHVwKHBvcHVwX2EzN2NkNzdhNDhkZTRjYWZhOGEzYzBmMzQxMTE0NGIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2OWZjY2E4M2E1MzRjZmRiOTA1YzkyYzY2MTljMmIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc4NDAyNTU0Nzk1MzU1LC03My45MTMwNjgzMTc4NzM5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YmJiOTNiZWU0NmM0MDA2OWE5M2U2NzFiZTY5MzBhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTQ0ODkyMGYyOGE0MDI4YTc5MjY1ZDMyZTIwOWRjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYTE0NDg5MjBmMjhhNDAyOGE3OTI2NWQzMmUyMDlkYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9jZWFuIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiYmI5M2JlZTQ2YzQwMDY5YTkzZTY3MWJlNjkzMGFkLnNldENvbnRlbnQoaHRtbF9hMTQ0ODkyMGYyOGE0MDI4YTc5MjY1ZDMyZTIwOWRjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNjlmY2NhODNhNTM0Y2ZkYjkwNWM5MmM2NjE5YzJiMy5iaW5kUG9wdXAocG9wdXBfN2JiYjkzYmVlNDZjNDAwNjlhOTNlNjcxYmU2OTMwYWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmViMGI4Y2VlZjZjNGEyMWFjNjAxOTlkYmEzNTk5OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzg1Njk5NTcyNzQ3OSwtNzMuODY3OTc1OTgwODEzMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTgwMjcyMDQ3M2ZlNDVkMjhmMDAzNjU0ODY2ODQyNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjdjNzNmMWYzZmJmNGJlZjkyOTMwY2VkMDdjZDQxNTYgPSAkKCc8ZGl2IGlkPSJodG1sXzY3YzczZjFmM2ZiZjRiZWY5MjkzMGNlZDA3Y2Q0MTU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaXR5IExpbmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4MDI3MjA0NzNmZTQ1ZDI4ZjAwMzY1NDg2Njg0MjY1LnNldENvbnRlbnQoaHRtbF82N2M3M2YxZjNmYmY0YmVmOTI5MzBjZWQwN2NkNDE1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZWIwYjhjZWVmNmM0YTIxYWM2MDE5OWRiYTM1OTk4ZS5iaW5kUG9wdXAocG9wdXBfYTgwMjcyMDQ3M2ZlNDVkMjhmMDAzNjU0ODY2ODQyNjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGFiYzA0ZWU4YjlhNDhkNmJiNzdhYzg3ODRhZGFmODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTUxNDk1NTA0NTMwOCwtNzMuODk4NTU2MzM2MzAzMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTgxNDQyYWQ2ODliNGRkNDk1Y2JiYWE1NmViYjc4NzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ5MmUyYWFmNTgxNDk1MmEwYjU0ZmM0NGIxMjQzMmEgPSAkKCc8ZGl2IGlkPSJodG1sXzM0OTJlMmFhZjU4MTQ5NTJhMGI1NGZjNDRiMTI0MzJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZXJnZW4gQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4MTQ0MmFkNjg5YjRkZDQ5NWNiYmFhNTZlYmI3ODcxLnNldENvbnRlbnQoaHRtbF8zNDkyZTJhYWY1ODE0OTUyYTBiNTRmYzQ0YjEyNDMyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYWJjMDRlZThiOWE0OGQ2YmI3N2FjODc4NGFkYWY4MC5iaW5kUG9wdXAocG9wdXBfMTgxNDQyYWQ2ODliNGRkNDk1Y2JiYWE1NmViYjc4NzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODE4ZWYxZDUxNGE3NDBkN2E5MTI5MTBiOGE3ZTNmNWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjU1OTU4OTg2OTg0MywtNzMuOTU3NTk1MjM0ODk4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTkxNWRkYjMxMzRmNDkyZWFmNjg0ZmFmM2Q0NDEwMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI5MzQyMTFlYWM3NGM5ZTkzMmMyMGU3MTYxYWQwYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzRiOTM0MjExZWFjNzRjOWU5MzJjMjBlNzE2MWFkMGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWR3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTE1ZGRiMzEzNGY0OTJlYWY2ODRmYWYzZDQ0MTAyZC5zZXRDb250ZW50KGh0bWxfNGI5MzQyMTFlYWM3NGM5ZTkzMmMyMGU3MTYxYWQwYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODE4ZWYxZDUxNGE3NDBkN2E5MTI5MTBiOGE3ZTNmNWUuYmluZFBvcHVwKHBvcHVwX2E5MTVkZGIzMTM0ZjQ5MmVhZjY4NGZhZjNkNDQxMDJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlYzhmZDQ0ZGY2NzQ4YWM5MTg2MTg3MTc2NTljYjBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ3MDA4NjAzMTg1MTg1LC03My45NjI2MTMxNjcxNjA0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOTE5ZjkyNDM1NTY0ZGU0YjhhOTJmMTlmYWE4ZDVlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZmI4N2E4MmE0ZjA0OWUyYjk2MjhjMTQ1MWI0MzJmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWZiODdhODJhNGYwNDllMmI5NjI4YzE0NTFiNDMyZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByb3NwZWN0IFBhcmsgU291dGg8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5MTlmOTI0MzU1NjRkZTRiOGE5MmYxOWZhYThkNWUwLnNldENvbnRlbnQoaHRtbF8xZmI4N2E4MmE0ZjA0OWUyYjk2MjhjMTQ1MWI0MzJmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZWM4ZmQ0NGRmNjc0OGFjOTE4NjE4NzE3NjU5Y2IwYi5iaW5kUG9wdXAocG9wdXBfZDkxOWY5MjQzNTU2NGRlNGI4YTkyZjE5ZmFhOGQ1ZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjgzZDNiYmJkNzM1NDFhMWFkNDE1NTMzZjk1MWNkYjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjM4NDUyNDQ3ODQxOSwtNzMuOTE2MDc0ODM5NTEzMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUzOTk0Nzk1OTVlNDBkNTk2NTU4YmZlNjRjOGRiNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGMzOGZkNDc0Mzc1NDcxZWJhY2NmOGFmMzExYmJhMTggPSAkKCc8ZGl2IGlkPSJodG1sXzhjMzhmZDQ3NDM3NTQ3MWViYWNjZjhhZjMxMWJiYTE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HZW9yZ2V0b3duPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTM5OTQ3OTU5NWU0MGQ1OTY1NThiZmU2NGM4ZGI0Yy5zZXRDb250ZW50KGh0bWxfOGMzOGZkNDc0Mzc1NDcxZWJhY2NmOGFmMzExYmJhMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjgzZDNiYmJkNzM1NDFhMWFkNDE1NTMzZjk1MWNkYjIuYmluZFBvcHVwKHBvcHVwXzE1Mzk5NDc5NTk1ZTQwZDU5NjU1OGJmZTY0YzhkYjRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxNTFiZjU1NmMyMTQwNDM5NGM1OGJhZjg0YjVmZWE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4NDkyNDEwNDE1NDgsLTczLjkzODg1ODE1MjY5MTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4MjdjNGNlMmUwOTRhYmRiMDUxMDQ3YTJkMDRjZTA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjMDA4NTZiNWIzOTQ3ZTg5YjYyZTkxMmM5ZDI3YmYwID0gJCgnPGRpdiBpZD0iaHRtbF83YzAwODU2YjViMzk0N2U4OWI2MmU5MTJjOWQyN2JmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBXaWxsaWFtc2J1cmc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4MjdjNGNlMmUwOTRhYmRiMDUxMDQ3YTJkMDRjZTA3LnNldENvbnRlbnQoaHRtbF83YzAwODU2YjViMzk0N2U4OWI2MmU5MTJjOWQyN2JmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTUxYmY1NTZjMjE0MDQzOTRjNThiYWY4NGI1ZmVhOS5iaW5kUG9wdXAocG9wdXBfZjgyN2M0Y2UyZTA5NGFiZGIwNTEwNDdhMmQwNGNlMDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2IyMmI3YzA5ZWM3NGJmMWI2ODdmMGVjMjFlNTlmYzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQ4MjI5MDY1MzIwMTQsLTczLjk1ODgwODU3NTg3NTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwYTllMzUzZDI4NDRjMDk5ZjdlOTdkOWMwYmRiNTFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzNjkzNWUxMTU0MjRlYThhOGU0YjY3MDFkYTU3MzI5ID0gJCgnPGRpdiBpZD0iaHRtbF8xMzY5MzVlMTE1NDI0ZWE4YThlNGI2NzAxZGE1NzMyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGggU2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzBhOWUzNTNkMjg0NGMwOTlmN2U5N2Q5YzBiZGI1MWUuc2V0Q29udGVudChodG1sXzEzNjkzNWUxMTU0MjRlYThhOGU0YjY3MDFkYTU3MzI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiMjJiN2MwOWVjNzRiZjFiNjg3ZjBlYzIxZTU5ZmMzLmJpbmRQb3B1cChwb3B1cF9jMGE5ZTM1M2QyODQ0YzA5OWY3ZTk3ZDljMGJkYjUxZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZmJiZjYxOTAxNjM0YzAzYjgwMWZmNTAxYWU3OTU5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMDg2MTQ3MjY1MDY0LC03My45NTgwMDA5NTE1MzMzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDExNWU0ZDczYTc0MWMzYTEzNmYzYjgyYzQ3NWU2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTAzODE1Mjg5OGU0MTk1OTU5MzkyYjMwNjkwNWRkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2UwMzgxNTI4OThlNDE5NTk1OTM5MmIzMDY5MDVkZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIFNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0MTE1ZTRkNzNhNzQxYzNhMTM2ZjNiODJjNDc1ZTY5LnNldENvbnRlbnQoaHRtbF8zZTAzODE1Mjg5OGU0MTk1OTU5MzkyYjMwNjkwNWRkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZmJiZjYxOTAxNjM0YzAzYjgwMWZmNTAxYWU3OTU5ZC5iaW5kUG9wdXAocG9wdXBfMzQxMTVlNGQ3M2E3NDFjM2ExMzZmM2I4MmM0NzVlNjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODExMTJjMTQzYWZmNDI3NjhhZjY0NjMwNzliYjJlYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTMwNTk3NjY2Nzk0MiwtNzMuOTY4MzY2NzgwMzU1NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUyNGY5Y2MyMmUwNDUzMDg1YTgzYWE3ZjI3NGQ1N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWRkODdhZWIwYzhiNDU4ZmFjZjVmYzEyZDVmZDYyM2YgPSAkKCc8ZGl2IGlkPSJodG1sXzVkZDg3YWViMGM4YjQ1OGZhY2Y1ZmMxMmQ1ZmQ2MjNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PY2VhbiBQYXJrd2F5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTI0ZjljYzIyZTA0NTMwODVhODNhYTdmMjc0ZDU3Yi5zZXRDb250ZW50KGh0bWxfNWRkODdhZWIwYzhiNDU4ZmFjZjVmYzEyZDVmZDYyM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODExMTJjMTQzYWZmNDI3NjhhZjY0NjMwNzliYjJlYjQuYmluZFBvcHVwKHBvcHVwXzE1MjRmOWNjMjJlMDQ1MzA4NWE4M2FhN2YyNzRkNTdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5ZmZhOGFiOTkzMjRiYWQ4ODNjYzNlMTdiOTc0MTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE0NzY4MTI2OTQyMjYsLTc0LjAzMTk3OTE0NTM3OTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MDUxYzZiMThmNTQzNmM4NzkwOTBiMGM1YjJhNjEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjZDFjMGZiMGY2NTQ4NTdhZTlmYzJkNWU1ZDRiZGFmID0gJCgnPGRpdiBpZD0iaHRtbF9iY2QxYzBmYjBmNjU0ODU3YWU5ZmMyZDVlNWQ0YmRhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9ydCBIYW1pbHRvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjgwNTFjNmIxOGY1NDM2Yzg3OTA5MGIwYzViMmE2MTAuc2V0Q29udGVudChodG1sX2JjZDFjMGZiMGY2NTQ4NTdhZTlmYzJkNWU1ZDRiZGFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI5ZmZhOGFiOTkzMjRiYWQ4ODNjYzNlMTdiOTc0MTU3LmJpbmRQb3B1cChwb3B1cF8yODA1MWM2YjE4ZjU0MzZjODc5MDkwYjBjNWIyYTYxMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDBmOGNlZWEyODE0MjUzYTk3ODdlNTc1YmY3YzYyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNTYxODQyMjMxNDMyLC03My45OTQyNzkzNjI1NTk3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjZjNTE4OTA2ZmU0MDQ4YTFiYmNkZjI3NDlhNWMxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMDMxYmExYzMxYjA0NjAwODY3NTViMjY3NTEwMTMxNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTAzMWJhMWMzMWIwNDYwMDg2NzU1YjI2NzUxMDEzMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoaW5hdG93bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY2YzUxODkwNmZlNDA0OGExYmJjZGYyNzQ5YTVjMTguc2V0Q29udGVudChodG1sX2UwMzFiYTFjMzFiMDQ2MDA4Njc1NWIyNjc1MTAxMzE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0MGY4Y2VlYTI4MTQyNTNhOTc4N2U1NzViZjdjNjJlLmJpbmRQb3B1cChwb3B1cF9mZjZjNTE4OTA2ZmU0MDQ4YTFiYmNkZjI3NDlhNWMxOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTZmOGI5Zjk2OWM0MDZkOTc2NGU5Mzc5MDE2OTk4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1MTkwMjUyNTU1MzA1LC03My45MzY5MDAyNzk4NTIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZjU3ZmE3ZjcwMGU0YmNkOGQxYmExM2RjN2Y3ZGY5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMThiNjA4ZTFiY2M0ODQzYjZjYjc1ZmE5OGNiNDk2ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzE4YjYwOGUxYmNjNDg0M2I2Y2I3NWZhOThjYjQ5NmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhc2hpbmd0b24gSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWY1N2ZhN2Y3MDBlNGJjZDhkMWJhMTNkYzdmN2RmOWUuc2V0Q29udGVudChodG1sXzMxOGI2MDhlMWJjYzQ4NDNiNmNiNzVmYTk4Y2I0OTZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlNmY4YjlmOTY5YzQwNmQ5NzY0ZTkzNzkwMTY5OThhLmJpbmRQb3B1cChwb3B1cF9hZjU3ZmE3ZjcwMGU0YmNkOGQxYmExM2RjN2Y3ZGY5ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzIzZDI2OTVhZmI0NzVjODU5NGU0NmRhOWFlYzg3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg2NzY4Mzk2NDQ5OTE1LC03My45MjEyMTA0MjIwMzg5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzA1NTcyZDZmMDk0NTdkOGQ5OTk2MGVhNDYzNjU2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YTA2ZmQ4ZjI5ZTE0NzZlOTNhZDY4ZmFhMWNjNTVhNiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2EwNmZkOGYyOWUxNDc2ZTkzYWQ2OGZhYTFjYzU1YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPklud29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTMwNTU3MmQ2ZjA5NDU3ZDhkOTk5NjBlYTQ2MzY1NjIuc2V0Q29udGVudChodG1sXzdhMDZmZDhmMjllMTQ3NmU5M2FkNjhmYWExY2M1NWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzMjNkMjY5NWFmYjQ3NWM4NTk0ZTQ2ZGE5YWVjODc2LmJpbmRQb3B1cChwb3B1cF9lMzA1NTcyZDZmMDk0NTdkOGQ5OTk2MGVhNDYzNjU2Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDcyYzllNzIyNzY0ZmExOTZiOWUxYmZhOWRhNDJmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMzYwNDI4NDgxMTkzNSwtNzMuOTQ5Njg3OTE4ODMzNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ0ZjE3NmU5MjQyNDIwZWEyZmFkOGJkMzY1ZDAxZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2RkYTJmNjVkZTZmNDYxOTliYTI3NGNlN2U5ZWRkNzkgPSAkKCc8ZGl2IGlkPSJodG1sXzNkZGEyZjY1ZGU2ZjQ2MTk5YmEyNzRjZTdlOWVkZDc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYW1pbHRvbiBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDRmMTc2ZTkyNDI0MjBlYTJmYWQ4YmQzNjVkMDFkZS5zZXRDb250ZW50KGh0bWxfM2RkYTJmNjVkZTZmNDYxOTliYTI3NGNlN2U5ZWRkNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ3MmM5ZTcyMjc2NGZhMTk2YjllMWJmYTlkYTQyZmQuYmluZFBvcHVwKHBvcHVwXzY0NGYxNzZlOTI0MjQyMGVhMmZhZDhiZDM2NWQwMWRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyODkxNTFlZmNlZTRiMzBhYmZlMDRjZjU2MDdiYmQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE2OTM0NDI5NDk3OCwtNzMuOTU3Mzg1MzkzNTE4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjI4ODlkMWY3NGI0YjAzYWUwYTFmOGZkNmNkNjlkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMjJiNDhiMmVhMjg0Y2Q1YTFmODA4MDYwMWNkOTk4NyA9ICQoJzxkaXYgaWQ9Imh0bWxfMTIyYjQ4YjJlYTI4NGNkNWExZjgwODA2MDFjZDk5ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbmhhdHRhbnZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YjI4ODlkMWY3NGI0YjAzYWUwYTFmOGZkNmNkNjlkMy5zZXRDb250ZW50KGh0bWxfMTIyYjQ4YjJlYTI4NGNkNWExZjgwODA2MDFjZDk5ODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzI4OTE1MWVmY2VlNGIzMGFiZmUwNGNmNTYwN2JiZDEuYmluZFBvcHVwKHBvcHVwXzdiMjg4OWQxZjc0YjRiMDNhZTBhMWY4ZmQ2Y2Q2OWQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5NTZmYjhkMDg1NTQ2NzdiNjRjMTVjOWM2ODBlNDlhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1OTc2MDY3NDI0MTQsLTczLjk0MzIxMTEyNjAzOTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiZDk3MThjNDFlYjQ2ZmJiMjRmZWM4NmE5MDUyZmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxNThmZmQ2NDEyZTQ3NGNhNDQxNWY0M2Q2MWMyOTYxID0gJCgnPGRpdiBpZD0iaHRtbF80MTU4ZmZkNjQxMmU0NzRjYTQ0MTVmNDNkNjFjMjk2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbCBIYXJsZW08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiZDk3MThjNDFlYjQ2ZmJiMjRmZWM4NmE5MDUyZmU3LnNldENvbnRlbnQoaHRtbF80MTU4ZmZkNjQxMmU0NzRjYTQ0MTVmNDNkNjFjMjk2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTU2ZmI4ZDA4NTU0Njc3YjY0YzE1YzljNjgwZTQ5YS5iaW5kUG9wdXAocG9wdXBfZGJkOTcxOGM0MWViNDZmYmIyNGZlYzg2YTkwNTJmZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNiN2RhODlhYmRmNGRmOWJkYTUwZmJkMjdlNTEwNTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTIyNDk0NjY2MzAzMywtNzMuOTQ0MTgyMjMxNDg1MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjViM2VjM2IzNGJkNDU1N2I4NGJlMzNmNmQxMjVkMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTE5YmYzN2M2ODhmNDk3YjkwZmUzYThhNmVkMDU5NWIgPSAkKCc8ZGl2IGlkPSJodG1sXzkxOWJmMzdjNjg4ZjQ5N2I5MGZlM2E4YTZlZDA1OTViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IEhhcmxlbTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjViM2VjM2IzNGJkNDU1N2I4NGJlMzNmNmQxMjVkMGUuc2V0Q29udGVudChodG1sXzkxOWJmMzdjNjg4ZjQ5N2I5MGZlM2E4YTZlZDA1OTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzYjdkYTg5YWJkZjRkZjliZGE1MGZiZDI3ZTUxMDUyLmJpbmRQb3B1cChwb3B1cF8yNWIzZWMzYjM0YmQ0NTU3Yjg0YmUzM2Y2ZDEyNWQwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZTA2NGQ1YmFlYjI0OTgxODlkMmExMjM1Nzc1YmQ0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTYzODU3MzMwMTgwNSwtNzMuOTYwNTA3NjMxMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWE3NDQ3ZGI4YzI5NDNkYzlmNDkxMDdhNTZkZjllMjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzk5YjUyMDZhMGE3NDA3YzhiMWM2ZWVhZGU2OGE3YzQgPSAkKCc8ZGl2IGlkPSJodG1sXzc5OWI1MjA2YTBhNzQwN2M4YjFjNmVlYWRlNjhhN2M0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VcHBlciBFYXN0IFNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNzQ0N2RiOGMyOTQzZGM5ZjQ5MTA3YTU2ZGY5ZTI0LnNldENvbnRlbnQoaHRtbF83OTliNTIwNmEwYTc0MDdjOGIxYzZlZWFkZTY4YTdjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZTA2NGQ1YmFlYjI0OTgxODlkMmExMjM1Nzc1YmQ0Ni5iaW5kUG9wdXAocG9wdXBfYWE3NDQ3ZGI4YzI5NDNkYzlmNDkxMDdhNTZkZjllMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzU4OTZkNDAwYjgzNGEzZDljNDRhYmRlM2U5ZTQwN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU5Mjk4NDk4ODQ4NzUsLTczLjk0NzExNzg0NDcxODI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlZjcxZGVlYzhlODQzM2M4N2Q5ODU3MTI0N2M2ZTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllM2QwYWUzZmY3ZTQ3MzI4ZWVmY2U0NjBjYjZhZmNhID0gJCgnPGRpdiBpZD0iaHRtbF85ZTNkMGFlM2ZmN2U0NzMyOGVlZmNlNDYwY2I2YWZjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WW9ya3ZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZWY3MWRlZWM4ZTg0MzNjODdkOTg1NzEyNDdjNmU1YS5zZXRDb250ZW50KGh0bWxfOWUzZDBhZTNmZjdlNDczMjhlZWZjZTQ2MGNiNmFmY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzU4OTZkNDAwYjgzNGEzZDljNDRhYmRlM2U5ZTQwN2IuYmluZFBvcHVwKHBvcHVwXzhlZjcxZGVlYzhlODQzM2M4N2Q5ODU3MTI0N2M2ZTVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2ZWE3NGQwMDdhMzRjYjY5NTNjYzFmNDI2MDE1ZGZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4MTEyNjU4Mjg3MzMsLTczLjk1ODg1OTY4ODEzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2ZiMjkwOWZmZjA4NDQ2MDljZjc5MTQ0ZmExYmQ1NGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWY5MmI1NDhhOWFkNGMwZjg0MDI1NmZlYjZmMzM5MTggPSAkKCc8ZGl2IGlkPSJodG1sXzlmOTJiNTQ4YTlhZDRjMGY4NDAyNTZmZWI2ZjMzOTE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZW5veCBIaWxsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmIyOTA5ZmZmMDg0NDYwOWNmNzkxNDRmYTFiZDU0ZS5zZXRDb250ZW50KGh0bWxfOWY5MmI1NDhhOWFkNGMwZjg0MDI1NmZlYjZmMzM5MTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTZlYTc0ZDAwN2EzNGNiNjk1M2NjMWY0MjYwMTVkZmEuYmluZFBvcHVwKHBvcHVwXzNmYjI5MDlmZmYwODQ0NjA5Y2Y3OTE0NGZhMWJkNTRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5OTg5NmI3YjA3ZjQ4YjlhODM5ZDI1MWFiM2VkMmI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYyMTU5NjA1NzYyODMsLTczLjk0OTE2NzY5MjI3OTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNDBiZjA0YmFhMTQ5NGZiOGUzMmQ1OThhN2M0ZjhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwMzQ0M2YyMzk1NzRiNzE4ZTk4OTgzZDI0NDc2OWY3ID0gJCgnPGRpdiBpZD0iaHRtbF84MDM0NDNmMjM5NTc0YjcxOGU5ODk4M2QyNDQ3NjlmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9vc2V2ZWx0IElzbGFuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2I0MGJmMDRiYWExNDk0ZmI4ZTMyZDU5OGE3YzRmOGQuc2V0Q29udGVudChodG1sXzgwMzQ0M2YyMzk1NzRiNzE4ZTk4OTgzZDI0NDc2OWY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ5OTg5NmI3YjA3ZjQ4YjlhODM5ZDI1MWFiM2VkMmI1LmJpbmRQb3B1cChwb3B1cF9jYjQwYmYwNGJhYTE0OTRmYjhlMzJkNTk4YTdjNGY4ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZDFjYWRjMzM5ZDY0OGE4YWMyOWY2YWQxNTA0NjAyMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NzY1Nzk5ODUzNDg1NCwtNzMuOTc3MDU5MjM2MzA2MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDVhZjJjZGUzNmQwNDhiYWI3OWRkMDcwZGVhMWE3MmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Q4ODBhMWIwMTI3NGYxNzk4ODEyODY5OGQxMzY4ZjggPSAkKCc8ZGl2IGlkPSJodG1sX2NkODgwYTFiMDEyNzRmMTc5ODgxMjg2OThkMTM2OGY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VcHBlciBXZXN0IFNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1YWYyY2RlMzZkMDQ4YmFiNzlkZDA3MGRlYTFhNzJkLnNldENvbnRlbnQoaHRtbF9jZDg4MGExYjAxMjc0ZjE3OTg4MTI4Njk4ZDEzNjhmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZDFjYWRjMzM5ZDY0OGE4YWMyOWY2YWQxNTA0NjAyMS5iaW5kUG9wdXAocG9wdXBfMDVhZjJjZGUzNmQwNDhiYWI3OWRkMDcwZGVhMWE3MmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTdhNDMyYWVhMDIwNGJhY2E1ODI3OTdmNDkwZmRlMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzM1Mjg4ODk0MjE2NiwtNzMuOTg1MzM3NzcwMDEyNjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWRjYTc0YmQxYjhkNGVmODk1YWI5YzliNGRiZjlmN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMThhMDExNTU5MjEzNDExZmFmNTM5NTljMjMyNzYyYzUgPSAkKCc8ZGl2IGlkPSJodG1sXzE4YTAxMTU1OTIxMzQxMWZhZjUzOTU5YzIzMjc2MmM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MaW5jb2xuIFNxdWFyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWRjYTc0YmQxYjhkNGVmODk1YWI5YzliNGRiZjlmN2Uuc2V0Q29udGVudChodG1sXzE4YTAxMTU1OTIxMzQxMWZhZjUzOTU5YzIzMjc2MmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3YTQzMmFlYTAyMDRiYWNhNTgyNzk3ZjQ5MGZkZTBiLmJpbmRQb3B1cChwb3B1cF85ZGNhNzRiZDFiOGQ0ZWY4OTVhYjljOWI0ZGJmOWY3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWM2OWMwYjZhMGU0MDc3ODYwYzhjMTA3Yzg3MjMzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1OTEwMDg5MTQ2MjEyLC03My45OTYxMTkzNjMwOTQ3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ODFlMDQ0MzIyNzA0NDM2ODZmNGFmNTczN2MwNDJkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jM2VkZmQ1YzhhMmI0ZmI0OTE5YTdmZGM2NDUyMDU0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzNlZGZkNWM4YTJiNGZiNDkxOWE3ZmRjNjQ1MjA1NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4MWUwNDQzMjI3MDQ0MzY4NmY0YWY1NzM3YzA0MmQ5LnNldENvbnRlbnQoaHRtbF9jM2VkZmQ1YzhhMmI0ZmI0OTE5YTdmZGM2NDUyMDU0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYWM2OWMwYjZhMGU0MDc3ODYwYzhjMTA3Yzg3MjMzMS5iaW5kUG9wdXAocG9wdXBfODgxZTA0NDMyMjcwNDQzNjg2ZjRhZjU3MzdjMDQyZDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDlmNzA2NzUyNmY3NGVjYTlkNjcyYzkwN2ViYzUzN2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTQ2OTExMDI3MDYyMywtNzMuOTgxNjY4ODI3MzAzMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI1ZTg1YmFlNTdiNDEzNmI1MTJlNmY1NmMwMzgyOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM1ODkxMGEwZDQwNGQ0NjhlMzdmYzQyY2JiMzcxY2MgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjNTg5MTBhMGQ0MDRkNDY4ZTM3ZmM0MmNiYjM3MWNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWR0b3duPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjVlODViYWU1N2I0MTM2YjUxMmU2ZjU2YzAzODI5YS5zZXRDb250ZW50KGh0bWxfZmM1ODkxMGEwZDQwNGQ0NjhlMzdmYzQyY2JiMzcxY2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDlmNzA2NzUyNmY3NGVjYTlkNjcyYzkwN2ViYzUzN2YuYmluZFBvcHVwKHBvcHVwXzRiNWU4NWJhZTU3YjQxMzZiNTEyZTZmNTZjMDM4MjlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlODhhZDlhYjlhNjQ4YTk5NTI5NzY1NDQ4M2Q2YmJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ4MzAzMDc3MjUyMTc0LC03My45NzgzMzIwNzkyNDEyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2NkNzQxMWRhZWY0NTI1OTI1MjgzYjkwMjhiYWM4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYWJmNjk0ZTEwMTg0MTE0YTA0MWQ1MmQwZDZmNjA3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmFiZjY5NGUxMDE4NDExNGEwNDFkNTJkMGQ2ZjYwNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk11cnJheSBIaWxsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2NkNzQxMWRhZWY0NTI1OTI1MjgzYjkwMjhiYWM4ZC5zZXRDb250ZW50KGh0bWxfYmFiZjY5NGUxMDE4NDExNGEwNDFkNTJkMGQ2ZjYwNzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmU4OGFkOWFiOWE2NDhhOTk1Mjk3NjU0NDgzZDZiYmYuYmluZFBvcHVwKHBvcHVwXzU3Y2Q3NDExZGFlZjQ1MjU5MjUyODNiOTAyOGJhYzhkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3MjVmM2Q1YTFiMjQ2NGViYWE1Y2ZmOTZlMGJkNDVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0MDM0NzA2NzQ3OTc1LC03NC4wMDMxMTYzMzQ3MjgxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMmVmMGYyNTE3MDY0YzRmYjE4YzhkMWQ3NWM0NGI3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMWE5MTY3MThlYjg0ZWFhYmRiNDdmOTFlMjE2MDNjZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDFhOTE2NzE4ZWI4NGVhYWJkYjQ3ZjkxZTIxNjAzY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoZWxzZWE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyZWYwZjI1MTcwNjRjNGZiMThjOGQxZDc1YzQ0YjdiLnNldENvbnRlbnQoaHRtbF9kMWE5MTY3MThlYjg0ZWFhYmRiNDdmOTFlMjE2MDNjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNzI1ZjNkNWExYjI0NjRlYmFhNWNmZjk2ZTBiZDQ1ZS5iaW5kUG9wdXAocG9wdXBfMzJlZjBmMjUxNzA2NGM0ZmIxOGM4ZDFkNzVjNDRiN2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGFmNjA4YmM0MDcwNDdkMzhkOWRjZmMwMDgwODJhMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjY5MzI4ODUzNjEyOCwtNzMuOTk5OTE0MDI5NDU5MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODAxZTJmYjMwY2NlNDNlM2E0OWM4OTYzYTU5NWYxYjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmZjOTcwNzNkYjBhNDlhZmI3YzViYmE2MjRmYTIwNzEgPSAkKCc8ZGl2IGlkPSJodG1sX2ZmYzk3MDczZGIwYTQ5YWZiN2M1YmJhNjI0ZmEyMDcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbndpY2ggVmlsbGFnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODAxZTJmYjMwY2NlNDNlM2E0OWM4OTYzYTU5NWYxYjIuc2V0Q29udGVudChodG1sX2ZmYzk3MDczZGIwYTQ5YWZiN2M1YmJhNjI0ZmEyMDcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhZjYwOGJjNDA3MDQ3ZDM4ZDlkY2ZjMDA4MDgyYTFlLmJpbmRQb3B1cChwb3B1cF84MDFlMmZiMzBjY2U0M2UzYTQ5Yzg5NjNhNTk1ZjFiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDJlMTk4NGQwZDQ0ODM2OTAwNjM4NDA0ZTJjZWQ0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzg0Njc3NzI3MDI0NCwtNzMuOTgyMjI2MTY1MDY0MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTMwMTllZjJlODkxNDA0YmFkODI3NmI1MmI0MDY3NDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhlMDJmYjMwZWI1NGU0OGI2NjQ2ZTFmOWI3MGJjYmEgPSAkKCc8ZGl2IGlkPSJodG1sXzA4ZTAyZmIzMGViNTRlNDhiNjY0NmUxZjliNzBiY2JhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzMDE5ZWYyZTg5MTQwNGJhZDgyNzZiNTJiNDA2NzQwLnNldENvbnRlbnQoaHRtbF8wOGUwMmZiMzBlYjU0ZTQ4YjY2NDZlMWY5YjcwYmNiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDJlMTk4NGQwZDQ0ODM2OTAwNjM4NDA0ZTJjZWQ0NC5iaW5kUG9wdXAocG9wdXBfNTMwMTllZjJlODkxNDA0YmFkODI3NmI1MmI0MDY3NDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjc1NTRjOWUxYWExNDg4NTgxMGE0NzM3MWFmZjNlNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc4MDY3NDg5Mjc2NSwtNzMuOTgwODkwMzE5OTkyOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjg4ODAxNzcyYTAzNGZmYWFlYmI1YWRkMWJhZjFlOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I2ZThjN2YxMjljNGU5MzgwZmMyZDkxNTVkODEyMmYgPSAkKCc8ZGl2IGlkPSJodG1sXzNiNmU4YzdmMTI5YzRlOTM4MGZjMmQ5MTU1ZDgxMjJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Mb3dlciBFYXN0IFNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4ODgwMTc3MmEwMzRmZmFhZWJiNWFkZDFiYWYxZTkyLnNldENvbnRlbnQoaHRtbF8zYjZlOGM3ZjEyOWM0ZTkzODBmYzJkOTE1NWQ4MTIyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NzU1NGM5ZTFhYTE0ODg1ODEwYTQ3MzcxYWZmM2U0NC5iaW5kUG9wdXAocG9wdXBfMjg4ODAxNzcyYTAzNGZmYWFlYmI1YWRkMWJhZjFlOTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGU2Njk0NGRjNzBiNGJjNzliZjE0MjNkM2VmMDY2NmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjE1MjE5Njc0NDMyMTYsLTc0LjAxMDY4MzI4NTU5MDg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4YmI1ZTMxN2I5YjRiMzdiMWNiZWRhMDZiMGUyMjk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkYzI1OWNhNjZkNTQ0NzRiY2NjMmJlMWExNzQ4ZWJkID0gJCgnPGRpdiBpZD0iaHRtbF9mZGMyNTljYTY2ZDU0NDc0YmNjYzJiZTFhMTc0OGViZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHJpYmVjYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzhiYjVlMzE3YjliNGIzN2IxY2JlZGEwNmIwZTIyOTQuc2V0Q29udGVudChodG1sX2ZkYzI1OWNhNjZkNTQ0NzRiY2NjMmJlMWExNzQ4ZWJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlNjY5NDRkYzcwYjRiYzc5YmYxNDIzZDNlZjA2NjZlLmJpbmRQb3B1cChwb3B1cF83OGJiNWUzMTdiOWI0YjM3YjFjYmVkYTA2YjBlMjI5NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mODdlN2E4MjEzNzg0MTBmODYwNDYyN2FiOGY4NDM2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxOTMyMzc5Mzk1OTA3LC03My45OTczMDQ2NzIwODA3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDE3M2I0MGM5OTc0OWVkOWFkYjZjZTRjMGIzNGY5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NjY0Y2YxM2ViMTU0NTYxYTRhYzU2N2E3NzEwMTE5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTY2NGNmMTNlYjE1NDU2MWE0YWM1NjdhNzcxMDExOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpdHRsZSBJdGFseTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODAxNzNiNDBjOTk3NDllZDlhZGI2Y2U0YzBiMzRmOTcuc2V0Q29udGVudChodG1sXzk2NjRjZjEzZWIxNTQ1NjFhNGFjNTY3YTc3MTAxMTk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y4N2U3YTgyMTM3ODQxMGY4NjA0NjI3YWI4Zjg0MzZiLmJpbmRQb3B1cChwb3B1cF84MDE3M2I0MGM5OTc0OWVkOWFkYjZjZTRjMGIzNGY5Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmJjNWIxZGZmYTE0MmExOWEzYmI0MDcwNWRiMzQ0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMjE4Mzg0MTMxNzk0LC03NC4wMDA2NTY2Njk1OTc1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MThjNDgyYmE0NTE0YWM2OGI4NzBlZDgzNTQ0YTljYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2NiOTMwNzIyNmI0OWM2OGUxNTFjNThlMjFkZGJlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2NjYjkzMDcyMjZiNDljNjhlMTUxYzU4ZTIxZGRiZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvaG88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxOGM0ODJiYTQ1MTRhYzY4Yjg3MGVkODM1NDRhOWNiLnNldENvbnRlbnQoaHRtbF9jY2NiOTMwNzIyNmI0OWM2OGUxNTFjNThlMjFkZGJlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZmJjNWIxZGZmYTE0MmExOWEzYmI0MDcwNWRiMzQ0Yy5iaW5kUG9wdXAocG9wdXBfNDE4YzQ4MmJhNDUxNGFjNjhiODcwZWQ4MzU0NGE5Y2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM1MDBhNGU0ODIyNGRkNzk2NTc3OTIxNjcyYjJlMjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzQ0MzM5MzU3MjQzNCwtNzQuMDA2MTc5OTgxMjY4MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2EwY2IzZDRkMTI3NGQ4NTkyMmRhZTg4MGYyZGY4NzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGNhODUwMjM3NTc3NGMyYjhkNzFhODZmYWNlZjg0NzggPSAkKCc8ZGl2IGlkPSJodG1sXzBjYTg1MDIzNzU3NzRjMmI4ZDcxYTg2ZmFjZWY4NDc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhMGNiM2Q0ZDEyNzRkODU5MjJkYWU4ODBmMmRmODc0LnNldENvbnRlbnQoaHRtbF8wY2E4NTAyMzc1Nzc0YzJiOGQ3MWE4NmZhY2VmODQ3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYzUwMGE0ZTQ4MjI0ZGQ3OTY1Nzc5MjE2NzJiMmUyNC5iaW5kUG9wdXAocG9wdXBfY2EwY2IzZDRkMTI3NGQ4NTkyMmRhZTg4MGYyZGY4NzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGE3ZTRhNTRiN2NkNDQ5NGFlODBmZjM5MTVhNGYzMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTczMDcwNDE3MDI4NjUsLTczLjk2NDI4NjE3NzQwNjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiY2Q2OWZjNTNlNjQ4MjE4NmNkZTdjMDhiZjBmMzI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyYjdlNzkxMmRmNDQ5OTA5ZmQzN2I5OGQ2YjZiZGVjID0gJCgnPGRpdiBpZD0iaHRtbF9mMmI3ZTc5MTJkZjQ0OTkwOWZkMzdiOThkNmI2YmRlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFuaGF0dGFuIFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmJjZDY5ZmM1M2U2NDgyMTg2Y2RlN2MwOGJmMGYzMjkuc2V0Q29udGVudChodG1sX2YyYjdlNzkxMmRmNDQ5OTA5ZmQzN2I5OGQ2YjZiZGVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhN2U0YTU0YjdjZDQ0OTRhZTgwZmYzOTE1YTRmMzEwLmJpbmRQb3B1cChwb3B1cF9iYmNkNjlmYzUzZTY0ODIxODZjZGU3YzA4YmYwZjMyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNmMwODQzOTFmN2M0NTYxODJlZmRmYzAxYjcxMTEwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwNzk5OTczODE2NTgyNiwtNzMuOTYzODk2Mjc5MDUzMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTI0YmY3ZTQ5ZGYxNGQwZGJhZjFkNWU4Njg2YmMwMDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ2YjNjMTc5MTYxNDA4YmE3NzU2YjNhOTY1NDVlNDEgPSAkKCc8ZGl2IGlkPSJodG1sXzc0NmIzYzE3OTE2MTQwOGJhNzc1NmIzYTk2NTQ1ZTQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3JuaW5nc2lkZSBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjRiZjdlNDlkZjE0ZDBkYmFmMWQ1ZTg2ODZiYzAwNC5zZXRDb250ZW50KGh0bWxfNzQ2YjNjMTc5MTYxNDA4YmE3NzU2YjNhOTY1NDVlNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzZjMDg0MzkxZjdjNDU2MTgyZWZkZmMwMWI3MTExMDIuYmluZFBvcHVwKHBvcHVwX2EyNGJmN2U0OWRmMTRkMGRiYWYxZDVlODY4NmJjMDA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiNTBhZGM5MTE5MDQ4OGI5YzM4NTU2MDM0NmYwZDJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM3MjA5ODMyNzE1LC03My45ODEzNzU5NDgzMzU0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMzc0M2U2MjQyMzM0OGQ4YmRkYWZjMzYwOWIzNDFmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTMyZTM3OTRmMTA0MjU2OGVlNTlmNDg2ZTI5NThhOCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2EzMmUzNzk0ZjEwNDI1NjhlZTU5ZjQ4NmUyOTU4YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW1lcmN5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzc0M2U2MjQyMzM0OGQ4YmRkYWZjMzYwOWIzNDFmYy5zZXRDb250ZW50KGh0bWxfM2EzMmUzNzk0ZjEwNDI1NjhlZTU5ZjQ4NmUyOTU4YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGI1MGFkYzkxMTkwNDg4YjljMzg1NTYwMzQ2ZjBkMmMuYmluZFBvcHVwKHBvcHVwX2IzNzQzZTYyNDIzMzQ4ZDhiZGRhZmMzNjA5YjM0MWZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2ZDcyNWVjNWQzZDQ4MGQ5NjI3YWZmNTg5MThhMjY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExOTMxOTgzOTQ1NjUsLTc0LjAxNjg2OTMwNTA4NjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhMmM5NGJjM2NkOTQ1ZmM4M2Y0MTNmN2U1NTBkZjllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM0YTQ3OThkZDI5MTQ0OGNiOWYxYTVlN2M5MDEyOGI4ID0gJCgnPGRpdiBpZD0iaHRtbF8zNGE0Nzk4ZGQyOTE0NDhjYjlmMWE1ZTdjOTAxMjhiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF0dGVyeSBQYXJrIENpdHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhMmM5NGJjM2NkOTQ1ZmM4M2Y0MTNmN2U1NTBkZjllLnNldENvbnRlbnQoaHRtbF8zNGE0Nzk4ZGQyOTE0NDhjYjlmMWE1ZTdjOTAxMjhiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNmQ3MjVlYzVkM2Q0ODBkOTYyN2FmZjU4OTE4YTI2OC5iaW5kUG9wdXAocG9wdXBfM2EyYzk0YmMzY2Q5NDVmYzgzZjQxM2Y3ZTU1MGRmOWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ5Y2IxMjQ1MzhkNGI4N2E4MzM1YTI4ZTMxNmEwODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDcxMDcxMDcyNzA0OCwtNzQuMDEwNjY1NDQ1MjEyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOWUzYzM3NjU5YWY0ZDZiYjQ5NmE4OGQyYjg1MDkwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDY0OTZmN2MwMDM0ZDBhODU0Y2Y1MjJmNTViOWMxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfODQ2NDk2ZjdjMDAzNGQwYTg1NGNmNTIyZjU1YjljMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpbmFuY2lhbCBEaXN0cmljdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDllM2MzNzY1OWFmNGQ2YmI0OTZhODhkMmI4NTA5MGEuc2V0Q29udGVudChodG1sXzg0NjQ5NmY3YzAwMzRkMGE4NTRjZjUyMmY1NWI5YzEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkOWNiMTI0NTM4ZDRiODdhODMzNWEyOGUzMTZhMDg4LmJpbmRQb3B1cChwb3B1cF8wOWUzYzM3NjU5YWY0ZDZiYjQ5NmE4OGQyYjg1MDkwYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMWMzN2JhNGM2NzU0YTUyOGQxODcxZDI0N2FkMWE4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2ODUwODU5MzM1NDkyLC03My45MTU2NTM3NDMwNDIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZTA4MTZjODczZDQ0N2ZlYjA1ZjJkNTA3MGVhMDQwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMjU0YzJkYjBmZjA0NjllOTFlNTI4MDc1Y2NkZjhhOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTI1NGMyZGIwZmYwNDY5ZTkxZTUyODA3NWNjZGY4YTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFzdG9yaWE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlMDgxNmM4NzNkNDQ3ZmViMDVmMmQ1MDcwZWEwNDBlLnNldENvbnRlbnQoaHRtbF8xMjU0YzJkYjBmZjA0NjllOTFlNTI4MDc1Y2NkZjhhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMWMzN2JhNGM2NzU0YTUyOGQxODcxZDI0N2FkMWE4Ni5iaW5kUG9wdXAocG9wdXBfMWUwODE2Yzg3M2Q0NDdmZWIwNWYyZDUwNzBlYTA0MGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWJmODViMjg5Mjg2NDI1NzhhNWNkMzVmMDc4MmI3YjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDYzNDkwODg2MDIyMiwtNzMuOTAxODQxNjY4MzgyODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2EyNThjZmUyMDNlNDcwMGJhN2EwZDg0MDQ2YTRkMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjg0MWU1NDFjY2I2NDA2YWE5MjAyZjI2YzhjZGUyNmQgPSAkKCc8ZGl2IGlkPSJodG1sXzY4NDFlNTQxY2NiNjQwNmFhOTIwMmYyNmM4Y2RlMjZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb29kc2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2EyNThjZmUyMDNlNDcwMGJhN2EwZDg0MDQ2YTRkMzAuc2V0Q29udGVudChodG1sXzY4NDFlNTQxY2NiNjQwNmFhOTIwMmYyNmM4Y2RlMjZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViZjg1YjI4OTI4NjQyNTc4YTVjZDM1ZjA3ODJiN2I5LmJpbmRQb3B1cChwb3B1cF9jYTI1OGNmZTIwM2U0NzAwYmE3YTBkODQwNDZhNGQzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZWY0NTU5YWQ2N2Y0YzAwYjJmMTY3ZWM3YjliMjg0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTk4MTM4MDA3MzY3LC03My44ODI4MjEwOTE2NDM2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YTg1ZDM3YjNjM2Q0OTkxYjYzNjg5NDMxMjBjZTVmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMGI2Yzk0ZDUxNzY0NzIyODE4MjU2OGFmYjkxNzgzNSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjBiNmM5NGQ1MTc2NDcyMjgxODI1NjhhZmI5MTc4MzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphY2tzb24gSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWE4NWQzN2IzYzNkNDk5MWI2MzY4OTQzMTIwY2U1ZmQuc2V0Q29udGVudChodG1sX2IwYjZjOTRkNTE3NjQ3MjI4MTgyNTY4YWZiOTE3ODM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNlZjQ1NTlhZDY3ZjRjMDBiMmYxNjdlYzdiOWIyODQ5LmJpbmRQb3B1cChwb3B1cF85YTg1ZDM3YjNjM2Q0OTkxYjYzNjg5NDMxMjBjZTVmZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMzQzOGI2ZjI5Nzk0ZjA0OGQ3ZTBlNTVhN2VjZTc5ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDA0ODUwNTEyMjAyNCwtNzMuODgxNjU2MjIyODgzODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQxZjQ2NDdkMmI2NGFkMDgzY2I4MzQyODUxMDllZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmExMzAzN2UwYWUwNGE2NzhmNThjNzE2YjBlMmM4NzMgPSAkKCc8ZGl2IGlkPSJodG1sXzZhMTMwMzdlMGFlMDRhNjc4ZjU4YzcxNmIwZTJjODczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbG1odXJzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQxZjQ2NDdkMmI2NGFkMDgzY2I4MzQyODUxMDllZDkuc2V0Q29udGVudChodG1sXzZhMTMwMzdlMGFlMDRhNjc4ZjU4YzcxNmIwZTJjODczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzNDM4YjZmMjk3OTRmMDQ4ZDdlMGU1NWE3ZWNlNzlmLmJpbmRQb3B1cChwb3B1cF8wZDFmNDY0N2QyYjY0YWQwODNjYjgzNDI4NTEwOWVkOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMjkyN2I1MjEwNjM0ZDI1YTE2ZTViYTQ4ZmIxM2JmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY1NDIyNTI3NzM4NDg3LC03My44MzgxMzc2NDYwMDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FiZDU5OWRkNTNkODRlNWNiMmI5MTQ0YmZjZDI1MTc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1YzQ5ZDdkZWMzMTQwNzVhYTZkNTEwN2ViNzBlZDViID0gJCgnPGRpdiBpZD0iaHRtbF80NWM0OWQ3ZGVjMzE0MDc1YWE2ZDUxMDdlYjcwZWQ1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG93YXJkIEJlYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYmQ1OTlkZDUzZDg0ZTVjYjJiOTE0NGJmY2QyNTE3OS5zZXRDb250ZW50KGh0bWxfNDVjNDlkN2RlYzMxNDA3NWFhNmQ1MTA3ZWI3MGVkNWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjI5MjdiNTIxMDYzNGQyNWExNmU1YmE0OGZiMTNiZmQuYmluZFBvcHVwKHBvcHVwX2FiZDU5OWRkNTNkODRlNWNiMmI5MTQ0YmZjZDI1MTc5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwYjM1NzBlMmExMTQ0ODE5NjBiZWU0YzgxNTI1ZGZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyMzgxNzUwMTU2NjcsLTczLjg1NjgyNDk3MzQ1MjU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiOTU4MDYzNWYzZTRjMDQ4NmNkNWUyOTBkNjQxMmY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkZDc1MzAwMjUxMjQ0ZDFhNmI5OGE2ZTc4YzY3ZDcyID0gJCgnPGRpdiBpZD0iaHRtbF83ZGQ3NTMwMDI1MTI0NGQxYTZiOThhNmU3OGM2N2Q3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29yb25hPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Yjk1ODA2MzVmM2U0YzA0ODZjZDVlMjkwZDY0MTJmOS5zZXRDb250ZW50KGh0bWxfN2RkNzUzMDAyNTEyNDRkMWE2Yjk4YTZlNzhjNjdkNzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjBiMzU3MGUyYTExNDQ4MTk2MGJlZTRjODE1MjVkZmQuYmluZFBvcHVwKHBvcHVwXzhiOTU4MDYzNWYzZTRjMDQ4NmNkNWUyOTBkNjQxMmY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwM2UyOGMyMDA4NzRlNTc4OGIwNjY3OWUwMTg3NjM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI1MjYzNzgyMTY1MDMsLTczLjg0NDQ3NTAwNzg4OTgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiMDYwZmY0YzA2NjRkZTJiOTM0YTgwMDNhZjNlODAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0ZjAwMDI4ZDVlNDQzZTViNjA3NDM0Mjk1NDFhYmE5ID0gJCgnPGRpdiBpZD0iaHRtbF9kNGYwMDAyOGQ1ZTQ0M2U1YjYwNzQzNDI5NTQxYWJhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9yZXN0IEhpbGxzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YjA2MGZmNGMwNjY0ZGUyYjkzNGE4MDAzYWYzZTgwMS5zZXRDb250ZW50KGh0bWxfZDRmMDAwMjhkNWU0NDNlNWI2MDc0MzQyOTU0MWFiYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjAzZTI4YzIwMDg3NGU1Nzg4YjA2Njc5ZTAxODc2MzQuYmluZFBvcHVwKHBvcHVwXzdiMDYwZmY0YzA2NjRkZTJiOTM0YTgwMDNhZjNlODAxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5YjVjY2EwNzI2MjRlYWU5NjA4NmQ5ZGU3NTA4YmRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA1MTc5MDM1NDE0OCwtNzMuODI5ODE5MDU4MjU3MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTdkZmJjZTlkZDQ5NGFkMGE5Y2NmMjExYzdkODFiNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjk4NTdhMjA2Y2ZkNDU3ZGI5NGMyZTcxM2YyZDhkOGYgPSAkKCc8ZGl2IGlkPSJodG1sX2I5ODU3YTIwNmNmZDQ1N2RiOTRjMmU3MTNmMmQ4ZDhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LZXcgR2FyZGVuczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTdkZmJjZTlkZDQ5NGFkMGE5Y2NmMjExYzdkODFiNmIuc2V0Q29udGVudChodG1sX2I5ODU3YTIwNmNmZDQ1N2RiOTRjMmU3MTNmMmQ4ZDhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5YjVjY2EwNzI2MjRlYWU5NjA4NmQ5ZGU3NTA4YmRkLmJpbmRQb3B1cChwb3B1cF8xN2RmYmNlOWRkNDk0YWQwYTljY2YyMTFjN2Q4MWI2Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGZkMjA0OWQzNzI0M2EyOWJjOTE4YjFmODU0MDdmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5Nzk0NzMxNDcxNzYzLC03My44MzE4MzMyMTQ0Njg4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YTg5ZmViMGY2Mjg0MDNlOGM4YzFhZGY1ZDUyZTlhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTRhYjIwY2U1ZDY0YTcyYjkyYTljZGY1NjM4ZjBmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjU0YWIyMGNlNWQ2NGE3MmI5MmE5Y2RmNTYzOGYwZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpY2htb25kIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhODlmZWIwZjYyODQwM2U4YzhjMWFkZjVkNTJlOWE0LnNldENvbnRlbnQoaHRtbF9iNTRhYjIwY2U1ZDY0YTcyYjkyYTljZGY1NjM4ZjBmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OGZkMjA0OWQzNzI0M2EyOWJjOTE4YjFmODU0MDdmMS5iaW5kUG9wdXAocG9wdXBfOWE4OWZlYjBmNjI4NDAzZThjOGMxYWRmNWQ1MmU5YTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZiMDQ2YzM2ZWNjNGI1NGEwZDAyYTE4MWQ2NzdiNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjQ0NTQxOTY5Nzg0NiwtNzMuODMxNzczMDAzMjk1ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJhODgzMWVmODM3NDZjZjg4YjYxNGRiZWNkNzQ4Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGRmMWU2ZDNjOTBhNDkyYzkwMTdlNjgxMTJhZWE2ZDUgPSAkKCc8ZGl2IGlkPSJodG1sX2RkZjFlNmQzYzkwYTQ5MmM5MDE3ZTY4MTEyYWVhNmQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GbHVzaGluZzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJhODgzMWVmODM3NDZjZjg4YjYxNGRiZWNkNzQ4Y2Euc2V0Q29udGVudChodG1sX2RkZjFlNmQzYzkwYTQ5MmM5MDE3ZTY4MTEyYWVhNmQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdmYjA0NmMzNmVjYzRiNTRhMGQwMmExODFkNjc3YjQ4LmJpbmRQb3B1cChwb3B1cF82YmE4ODMxZWY4Mzc0NmNmODhiNjE0ZGJlY2Q3NDhjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjdkNmFkYmNjODQ0MjYxYWZlNDkyOGM4MWM2MWE5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MDIxNzM0NjEwNTI4LC03My45MzkyMDIyMzkxNTUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lN2ViMzQ3ODJjZGU0ZTlkODFjZGU5YTU5ZDJjMzA0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMDEyNzM3OTEyNzA0MTg0OWUxZDFhYjNmNjlkMjA5YiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjAxMjczNzkxMjcwNDE4NDllMWQxYWIzZjY5ZDIwOWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvbmcgSXNsYW5kIENpdHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3ZWIzNDc4MmNkZTRlOWQ4MWNkZTlhNTlkMmMzMDRhLnNldENvbnRlbnQoaHRtbF9mMDEyNzM3OTEyNzA0MTg0OWUxZDFhYjNmNjlkMjA5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMjdkNmFkYmNjODQ0MjYxYWZlNDkyOGM4MWM2MWE5OS5iaW5kUG9wdXAocG9wdXBfZTdlYjM0NzgyY2RlNGU5ZDgxY2RlOWE1OWQyYzMwNGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQwNGNiNGFkNzNmNDA5Zjg2ZmMzODhkOTJiMTY5OWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDAxNzYyODM1MTkyNCwtNzMuOTI2OTE2MTc1NjE1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjk5MGJlODAxOGZlNGJlZTk2N2Y1MzdkMGM3YjMzZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzMzM2U2YTFkZjFmNDBmODg3YzU3MzEzODc4Y2UzYTEgPSAkKCc8ZGl2IGlkPSJodG1sX2MzMzNlNmExZGYxZjQwZjg4N2M1NzMxMzg3OGNlM2ExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdW5ueXNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5OTBiZTgwMThmZTRiZWU5NjdmNTM3ZDBjN2IzM2U0LnNldENvbnRlbnQoaHRtbF9jMzMzZTZhMWRmMWY0MGY4ODdjNTczMTM4NzhjZTNhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDA0Y2I0YWQ3M2Y0MDlmODZmYzM4OGQ5MmIxNjk5ZS5iaW5kUG9wdXAocG9wdXBfMjk5MGJlODAxOGZlNGJlZTk2N2Y1MzdkMGM3YjMzZTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWJiNzdjNWE5YzQzNGM2MWI2NjUxMTU0M2Y5MWNkZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjQwNzMyMzg4MzA5MSwtNzMuODY3MDQxNDc2NTg3NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDJkMzMyMDk2OTllNDQ4ODg3YTc1Y2ZlMWI1NTg3MDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjFiZjc4MGJhNjYxNGZlN2E1YjlhNTJmZGMwYjY0MzEgPSAkKCc8ZGl2IGlkPSJodG1sX2IxYmY3ODBiYTY2MTRmZTdhNWI5YTUyZmRjMGI2NDMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IEVsbWh1cnN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmQzMzIwOTY5OWU0NDg4ODdhNzVjZmUxYjU1ODcwMi5zZXRDb250ZW50KGh0bWxfYjFiZjc4MGJhNjYxNGZlN2E1YjlhNTJmZGMwYjY0MzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJiNzdjNWE5YzQzNGM2MWI2NjUxMTU0M2Y5MWNkZjkuYmluZFBvcHVwKHBvcHVwXzQyZDMzMjA5Njk5ZTQ0ODg4N2E3NWNmZTFiNTU4NzAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmMzE1OGE2Yzg5ODRlNDI4M2VhNmFlZWI1MDk2ZWZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI1NDI3Mzc0MDkzNjA2LC03My44OTYyMTcxMzYyNjg1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lODViNWY0YTlhZjc0OTQ0OGQ3NGQ0NDM3ZWNlMzZjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNWE1Y2NiOTM5M2U0NTU1YmNlNjUyNWY0NjIxNDNiMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjVhNWNjYjkzOTNlNDU1NWJjZTY1MjVmNDYyMTQzYjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hc3BldGg8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4NWI1ZjRhOWFmNzQ5NDQ4ZDc0ZDQ0MzdlY2UzNmM1LnNldENvbnRlbnQoaHRtbF8yNWE1Y2NiOTM5M2U0NTU1YmNlNjUyNWY0NjIxNDNiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZjMxNThhNmM4OTg0ZTQyODNlYTZhZWViNTA5NmVmYi5iaW5kUG9wdXAocG9wdXBfZTg1YjVmNGE5YWY3NDk0NDhkNzRkNDQzN2VjZTM2YzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2YzMjBmMDBhYjkxNDRlNjk0NzQzNThkMzg5YjRiY2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDgzMjMxNTYxMzg1OCwtNzMuOTAxNDM1MTc1NTk1ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjdkNTJmZTU2NGUxNDY0OTk1NDdkM2VhMmRlMjZmMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RlNTFkZTVjY2NlNDFkN2I5MWZmMTZkYjAxOWNjMmUgPSAkKCc8ZGl2IGlkPSJodG1sX2NkZTUxZGU1Y2NjZTQxZDdiOTFmZjE2ZGIwMTljYzJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaWRnZXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3ZDUyZmU1NjRlMTQ2NDk5NTQ3ZDNlYTJkZTI2ZjI3LnNldENvbnRlbnQoaHRtbF9jZGU1MWRlNWNjY2U0MWQ3YjkxZmYxNmRiMDE5Y2MyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjMyMGYwMGFiOTE0NGU2OTQ3NDM1OGQzODliNGJjZC5iaW5kUG9wdXAocG9wdXBfYjdkNTJmZTU2NGUxNDY0OTk1NDdkM2VhMmRlMjZmMjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGYxODcxYTNhOWIwNDdmNDlkOTMxNjE1ZjEwYmJjNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDI3NjI0Mjk2NzgzOCwtNzMuODcwNzQxNjc0MzU2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGMyZGU3OWFhODQ4NDg5Mjg5OGJiM2ZiNDY5ZDU0MDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I2ODZhYjE5OTFlNGM0YmJmYTA4ZWU1YmE2MzRkNzUgPSAkKCc8ZGl2IGlkPSJodG1sXzNiNjg2YWIxOTkxZTRjNGJiZmEwOGVlNWJhNjM0ZDc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HbGVuZGFsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGMyZGU3OWFhODQ4NDg5Mjg5OGJiM2ZiNDY5ZDU0MDYuc2V0Q29udGVudChodG1sXzNiNjg2YWIxOTkxZTRjNGJiZmEwOGVlNWJhNjM0ZDc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmMTg3MWEzYTliMDQ3ZjQ5ZDkzMTYxNWYxMGJiYzZiLmJpbmRQb3B1cChwb3B1cF9kYzJkZTc5YWE4NDg0ODkyODk4YmIzZmI0NjlkNTQwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YWM2Y2JjMjAzMzQ0ZTFjYmYzZGNlZmRmMDE3OWIzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyODk3NDA5NDgwNzM1LC03My44NTc4MjY4NjkwNTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0NTA1YzFiZTg0OTQ5MzM4ZTllZjAxODc1YzhmYzcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQyYzVlYTViYzg1NTQ4OWZhODc2MjU1MjE1YzIzOThhID0gJCgnPGRpdiBpZD0iaHRtbF80MmM1ZWE1YmM4NTU0ODlmYTg3NjI1NTIxNWMyMzk4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVnbyBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDUwNWMxYmU4NDk0OTMzOGU5ZWYwMTg3NWM4ZmM3MC5zZXRDb250ZW50KGh0bWxfNDJjNWVhNWJjODU1NDg5ZmE4NzYyNTUyMTVjMjM5OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2FjNmNiYzIwMzM0NGUxY2JmM2RjZWZkZjAxNzliM2IuYmluZFBvcHVwKHBvcHVwXzM0NTA1YzFiZTg0OTQ5MzM4ZTllZjAxODc1YzhmYzcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3OTIwMDA4NTg5ZjQ2OTE5MWE5OTBkYTQ4OGQ0MTBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5ODg2ODc5MTU3ODksLTczLjg1ODExMDQ2NTU0MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGVkZWFmYzE5Yjk0NDU0Mjg4OTYyNzc2MDcxMjE3YmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTRjOGEwYTg5ZTVhNGMwOWE0ODA1MDgzZTE0NTE0MTYgPSAkKCc8ZGl2IGlkPSJodG1sXzk0YzhhMGE4OWU1YTRjMDlhNDgwNTA4M2UxNDUxNDE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Xb29kaGF2ZW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlZGVhZmMxOWI5NDQ1NDI4ODk2Mjc3NjA3MTIxN2JkLnNldENvbnRlbnQoaHRtbF85NGM4YTBhODllNWE0YzA5YTQ4MDUwODNlMTQ1MTQxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNzkyMDAwODU4OWY0NjkxOTFhOTkwZGE0ODhkNDEwZC5iaW5kUG9wdXAocG9wdXBfMGVkZWFmYzE5Yjk0NDU0Mjg4OTYyNzc2MDcxMjE3YmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAwMTI1OTViM2Q5NGQ5YzkzY2IyMWUwZTFkMGYyMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODA3MDg0NjgyNjU0MTUsLTczLjg0MzIwMjY2MTczNDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkZjMzY2U5YmQ3ZDQzMGJiYjJlN2YxNDdlZjBkYTlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5ZTZkNDgxN2ExNzRmZmRiYTJjYzZmYTMyZGI2ZDdiID0gJCgnPGRpdiBpZD0iaHRtbF82OWU2ZDQ4MTdhMTc0ZmZkYmEyY2M2ZmEzMmRiNmQ3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T3pvbmUgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmRmMzNjZTliZDdkNDMwYmJiMmU3ZjE0N2VmMGRhOWYuc2V0Q29udGVudChodG1sXzY5ZTZkNDgxN2ExNzRmZmRiYTJjYzZmYTMyZGI2ZDdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwMDEyNTk1YjNkOTRkOWM5M2NiMjFlMGUxZDBmMjM5LmJpbmRQb3B1cChwb3B1cF82ZGYzM2NlOWJkN2Q0MzBiYmIyZTdmMTQ3ZWYwZGE5Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYTQ3NmZlYWM2YmI0YjNmODczYTE1ZmE5M2ZhNzZkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2ODU0OTU3NzY3MTk1LC03My44MDk4NjQ3ODY0OTA0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZThkNjAxMDVlOTA0MzQyYjQwODhjMWQ0NTA4N2U5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hM2YyNDk0MGFhYjU0ZjAxYmU4ZDYyNzU1YjM3YmIxNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTNmMjQ5NDBhYWI1NGYwMWJlOGQ2Mjc1NWIzN2JiMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIE96b25lIFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlOGQ2MDEwNWU5MDQzNDJiNDA4OGMxZDQ1MDg3ZTk0LnNldENvbnRlbnQoaHRtbF9hM2YyNDk0MGFhYjU0ZjAxYmU4ZDYyNzU1YjM3YmIxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYTQ3NmZlYWM2YmI0YjNmODczYTE1ZmE5M2ZhNzZkYS5iaW5kUG9wdXAocG9wdXBfMmU4ZDYwMTA1ZTkwNDM0MmI0MDg4YzFkNDUwODdlOTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY5MmZmNDFiNzcwNDQ2M2IxNWJkZmE0YjlkM2FjZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODQ5MDI3NDkyNjAyMDUsLTczLjg0MzA0NTI4ODk2MTI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczZjI4NmQwNjY1YTRlOTU4ZjQ1OTIyYmU2MDQ0ODI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJlNWQ4NDk2ZjViMjQ5OWE4NGNhYWQxNzk3MDcyNWNmID0gJCgnPGRpdiBpZD0iaHRtbF8yZTVkODQ5NmY1YjI0OTlhODRjYWFkMTc5NzA3MjVjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sbGVnZSBQb2ludDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzNmMjg2ZDA2NjVhNGU5NThmNDU5MjJiZTYwNDQ4Mjguc2V0Q29udGVudChodG1sXzJlNWQ4NDk2ZjViMjQ5OWE4NGNhYWQxNzk3MDcyNWNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZmOTJmZjQxYjc3MDQ0NjNiMTViZGZhNGI5ZDNhY2Y4LmJpbmRQb3B1cChwb3B1cF83M2YyODZkMDY2NWE0ZTk1OGY0NTkyMmJlNjA0NDgyOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNWU3N2JlN2Q0N2Y0ODEwYTRhZGE3NjQ1MTM2YWRmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MTI5MDc2NjAyNjk0LC03My44MTQyMDIxNjYxMDg2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NGJhZjE0ZGRiYWU0NzU4ODQ3MmI1YmQ4MDAwZWNlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2MzOGFhOWRiYjA0NDU0OWEzZThkZTY3OWNiMzMzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjNjMzhhYTlkYmIwNDQ1NDlhM2U4ZGU2NzljYjMzM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldoaXRlc3RvbmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0YmFmMTRkZGJhZTQ3NTg4NDcyYjViZDgwMDBlY2UwLnNldENvbnRlbnQoaHRtbF9iM2MzOGFhOWRiYjA0NDU0OWEzZThkZTY3OWNiMzMzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNWU3N2JlN2Q0N2Y0ODEwYTRhZGE3NjQ1MTM2YWRmMS5iaW5kUG9wdXAocG9wdXBfNjRiYWYxNGRkYmFlNDc1ODg0NzJiNWJkODAwMGVjZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU0Mjk5ZGQwNTBlNDk2ZmE1ZThiZjYxZTVkZTY4NGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjYwNDA2MzI4MTA2NCwtNzMuNzc0MjczNjMwNjg2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZTg4ODI5MTk5OTY0MGExODBkM2QzYjI2NzljMGFhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjhhZDMzYjRlODM0N2Q4YjE0MTAyMGI3NDcxMDFmMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDY4YWQzM2I0ZTgzNDdkOGIxNDEwMjBiNzQ3MTAxZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheXNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlODg4MjkxOTk5NjQwYTE4MGQzZDNiMjY3OWMwYWFkLnNldENvbnRlbnQoaHRtbF80NjhhZDMzYjRlODM0N2Q4YjE0MTAyMGI3NDcxMDFmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZTQyOTlkZDA1MGU0OTZmYTVlOGJmNjFlNWRlNjg0Zi5iaW5kUG9wdXAocG9wdXBfN2U4ODgyOTE5OTk2NDBhMTgwZDNkM2IyNjc5YzBhYWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNiNDVhMDZkNDE1NDMwODk5MTcxMjc2YmYzOTFiOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjE3Mjk1NDkwMzI2MiwtNzMuNzkxNzYyNDM3MjgwNjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q3YjJkNDllYzQyNGQwNmJiZTVjYmFhZjJiZDJiMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDc5Yjk2YTRjZjk5NGZhNDg1ODYzZjUyMWE4ZDNlODcgPSAkKCc8ZGl2IGlkPSJodG1sX2Q3OWI5NmE0Y2Y5OTRmYTQ4NTg2M2Y1MjFhOGQzZTg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdWJ1cm5kYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZDdiMmQ0OWVjNDI0ZDA2YmJlNWNiYWFmMmJkMmIxNC5zZXRDb250ZW50KGh0bWxfZDc5Yjk2YTRjZjk5NGZhNDg1ODYzZjUyMWE4ZDNlODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWNiNDVhMDZkNDE1NDMwODk5MTcxMjc2YmYzOTFiOWIuYmluZFBvcHVwKHBvcHVwXzdkN2IyZDQ5ZWM0MjRkMDZiYmU1Y2JhYWYyYmQyYjE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3MWE2ODhhOTcxYTQ3YTg5MDYxNWY3NGFjYTNmNzZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcwODI2MTkyODI2NywtNzMuNzM4ODk3NzU1ODA3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTIwODBmMTg4ZTI0YjVhOTJhZTcyNTA2NmM2YjYwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2JjZThiOGI0MGI0YjJhODQ4ZmZlYmUzM2M1MGE1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdiY2U4YjhiNDBiNGIyYTg0OGZmZWJlMzNjNTBhNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpdHRsZSBOZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTIwODBmMTg4ZTI0YjVhOTJhZTcyNTA2NmM2YjYwZi5zZXRDb250ZW50KGh0bWxfMDdiY2U4YjhiNDBiNGIyYTg0OGZmZWJlMzNjNTBhNTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzcxYTY4OGE5NzFhNDdhODkwNjE1Zjc0YWNhM2Y3NmIuYmluZFBvcHVwKHBvcHVwXzkxMjA4MGYxODhlMjRiNWE5MmFlNzI1MDY2YzZiNjBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkMTZjODMwM2U2NzQ5OWJiNTBkZmExMDQ1YjI1ODkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY2ODQ2MDk3OTA3NjMsLTczLjc0MjQ5ODIwNzI3MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzk5NjljODViNjFjNGQyMTg1MWY0NWQ0OTA2MzI5ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODcyYTAwNjliZDQ0NGI1ZTk0ZjRkYmZkNTllM2VlNTUgPSAkKCc8ZGl2IGlkPSJodG1sXzg3MmEwMDY5YmQ0NDRiNWU5NGY0ZGJmZDU5ZTNlZTU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb3VnbGFzdG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOTk2OWM4NWI2MWM0ZDIxODUxZjQ1ZDQ5MDYzMjlmNi5zZXRDb250ZW50KGh0bWxfODcyYTAwNjliZDQ0NGI1ZTk0ZjRkYmZkNTllM2VlNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQxNmM4MzAzZTY3NDk5YmI1MGRmYTEwNDViMjU4OTEuYmluZFBvcHVwKHBvcHVwX2M5OTY5Yzg1YjYxYzRkMjE4NTFmNDVkNDkwNjMyOWY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YxOGY1YjkwMmY3YTRiOGJhNTRmNjNiMGMxZGI1NzNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NDQwNzk5NzQzMzIsLTczLjcxNTQ4MTE4OTk5MTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E3NGEwOGNmNmJiNTRhMzBiMDcyYWQ4NmVlOTljZDA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzNmI0MWZhZTA2YzQwZjE4OTlhOTY1YWM0MmQ0ODQxID0gJCgnPGRpdiBpZD0iaHRtbF8zMzZiNDFmYWUwNmM0MGYxODk5YTk2NWFjNDJkNDg0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2xlbiBPYWtzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzRhMDhjZjZiYjU0YTMwYjA3MmFkODZlZTk5Y2QwOC5zZXRDb250ZW50KGh0bWxfMzM2YjQxZmFlMDZjNDBmMTg5OWE5NjVhYzQyZDQ4NDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjE4ZjViOTAyZjdhNGI4YmE1NGY2M2IwYzFkYjU3M2UuYmluZFBvcHVwKHBvcHVwX2E3NGEwOGNmNmJiNTRhMzBiMDcyYWQ4NmVlOTljZDA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhZjM5N2RmYzVlNjRjZTM4YzI1MDI5MGI2OGYwNWRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI4NTczMTgxNzY2NzUsLTczLjcyMDEyODE0ODI2OTAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwZjllZTM5MGY3NDQxYTU5MTZlMzlmOTUzNDA0NTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkZmQ0YzZkNTBmNTQ2MDE5ZTE5YTk5MmIwMGRiMTk3ID0gJCgnPGRpdiBpZD0iaHRtbF85ZGZkNGM2ZDUwZjU0NjAxOWUxOWE5OTJiMDBkYjE5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVsbGVyb3NlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMGY5ZWUzOTBmNzQ0MWE1OTE2ZTM5Zjk1MzQwNDUwMi5zZXRDb250ZW50KGh0bWxfOWRmZDRjNmQ1MGY1NDYwMTllMTlhOTkyYjAwZGIxOTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWFmMzk3ZGZjNWU2NGNlMzhjMjUwMjkwYjY4ZjA1ZGQuYmluZFBvcHVwKHBvcHVwX2QwZjllZTM5MGY3NDQxYTU5MTZlMzlmOTUzNDA0NTAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNlZTdiNGQwOGU5MDRkOTc5OTExYzMzOGJhZDk0ZmM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyNTc4MjQ0MjI4MDQ2LC03My44MjA4Nzc2NDkzMzU2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNzVmYjFiNTZkZjQ0ZmEyYjAyYTUzZDQ3ZWIzMDQ0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjczOTI0MThlYTU0Zjk0OWJlYjY4YjcwZTI2NWJhOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjI3MzkyNDE4ZWE1NGY5NDliZWI2OGI3MGUyNjViYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktldyBHYXJkZW5zIEhpbGxzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzVmYjFiNTZkZjQ0ZmEyYjAyYTUzZDQ3ZWIzMDQ0OC5zZXRDb250ZW50KGh0bWxfMjI3MzkyNDE4ZWE1NGY5NDliZWI2OGI3MGUyNjViYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2VlN2I0ZDA4ZTkwNGQ5Nzk5MTFjMzM4YmFkOTRmYzguYmluZFBvcHVwKHBvcHVwX2I3NWZiMWI1NmRmNDRmYTJiMDJhNTNkNDdlYjMwNDQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyMDVhZTJlNjNiNTQyNzFiOWVkYWY1OWNiMzJlMDQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0Mzk0NDY1MzMxMywtNzMuNzgyNzEzMzcwMDMyNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTMxYmE5YWU1NDAxNDEyMGI0YmIxYmQ2MzQ3NGZjY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjJlYmE4MWIyNGFkNGNhOTgwMTFjMDc1Y2U1YjAyYjkgPSAkKCc8ZGl2IGlkPSJodG1sXzIyZWJhODFiMjRhZDRjYTk4MDExYzA3NWNlNWIwMmI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmVzaCBNZWFkb3dzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzFiYTlhZTU0MDE0MTIwYjRiYjFiZDYzNDc0ZmNjZi5zZXRDb250ZW50KGh0bWxfMjJlYmE4MWIyNGFkNGNhOTgwMTFjMDc1Y2U1YjAyYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTIwNWFlMmU2M2I1NDI3MWI5ZWRhZjU5Y2IzMmUwNDEuYmluZFBvcHVwKHBvcHVwX2UzMWJhOWFlNTQwMTQxMjBiNGJiMWJkNjM0NzRmY2NmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ZGFiNmYxYmJjNjRmM2JhYzcxMGI5N2YxOTkzMTczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEwOTM1NDcyNTIyNzEsLTczLjgxMTc0ODIyNDU4NjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5MGVkZTMzNmVhNjQ3N2U4ZjAwODRhZGQ4MTRjNWM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjOTM0M2ExODcyYTRjMTBiOTVjN2E3MjZhZDUwZDlmID0gJCgnPGRpdiBpZD0iaHRtbF9jYzkzNDNhMTg3MmE0YzEwYjk1YzdhNzI2YWQ1MGQ5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJpYXJ3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTBlZGUzMzZlYTY0NzdlOGYwMDg0YWRkODE0YzVjNi5zZXRDb250ZW50KGh0bWxfY2M5MzQzYTE4NzJhNGMxMGI5NWM3YTcyNmFkNTBkOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDZkYWI2ZjFiYmM2NGYzYmFjNzEwYjk3ZjE5OTMxNzMuYmluZFBvcHVwKHBvcHVwXzM5MGVkZTMzNmVhNjQ3N2U4ZjAwODRhZGQ4MTRjNWM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2MmFhN2YxNjk2MzQzZjhiYjAzNDllNTdkMWZlOTFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA0NjU3MzYwNjg3MTcsLTczLjc5NjkwMTY1ODg4Mjg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMzRhMGU2ZTUyODRkNTg4YjdjMjVlOTNlMmQwZmExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhZTdkZDE3NDNlMzRjOWY5MzA0Y2EzZmMzODgxYWNlID0gJCgnPGRpdiBpZD0iaHRtbF83YWU3ZGQxNzQzZTM0YzlmOTMwNGNhM2ZjMzg4MWFjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmFtYWljYSBDZW50ZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyMzRhMGU2ZTUyODRkNTg4YjdjMjVlOTNlMmQwZmExLnNldENvbnRlbnQoaHRtbF83YWU3ZGQxNzQzZTM0YzlmOTMwNGNhM2ZjMzg4MWFjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NjJhYTdmMTY5NjM0M2Y4YmIwMzQ5ZTU3ZDFmZTkxZi5iaW5kUG9wdXAocG9wdXBfZDIzNGEwZTZlNTI4NGQ1ODhiN2MyNWU5M2UyZDBmYTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGIxOTYyMDlmZDhkNGQwNzkzMjM1NDQ1NWMyOTE1Y2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDU2MTg1NzE0MTg1NSwtNzMuNzU0OTQ5NzYyMzQzMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWIyYmZkYjgwMmY4NDJjNWFhMTZjOTdmNzY2NmJjYWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjFiYTZjYzgyMWI3NDA5MWJmMTllYTAyZTQxYjNjMTEgPSAkKCc8ZGl2IGlkPSJodG1sXzYxYmE2Y2M4MjFiNzQwOTFiZjE5ZWEwMmU0MWIzYzExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PYWtsYW5kIEdhcmRlbnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliMmJmZGI4MDJmODQyYzVhYTE2Yzk3Zjc2NjZiY2FkLnNldENvbnRlbnQoaHRtbF82MWJhNmNjODIxYjc0MDkxYmYxOWVhMDJlNDFiM2MxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYjE5NjIwOWZkOGQ0ZDA3OTMyMzU0NDU1YzI5MTVjZi5iaW5kUG9wdXAocG9wdXBfOWIyYmZkYjgwMmY4NDJjNWFhMTZjOTdmNzY2NmJjYWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWExZmIwZjZhZWFmNGQ4NGI3NjYxOTJkNzc4YzMwOTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTg4OTMwOTIxNjczNTYsLTczLjczODcxNDg0NTc4NDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4ZWFhNTY1OWMyMzQwZjE4MTY2ZjhkMjk2ZjM0ZWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2ZDI4MWY4ZWQ1MTQzMDg4OTYwODg5MTBkNjdjOTlmID0gJCgnPGRpdiBpZD0iaHRtbF9kNmQyODFmOGVkNTE0MzA4ODk2MDg4OTEwZDY3Yzk5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UXVlZW5zIFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4ZWFhNTY1OWMyMzQwZjE4MTY2ZjhkMjk2ZjM0ZWJjLnNldENvbnRlbnQoaHRtbF9kNmQyODFmOGVkNTE0MzA4ODk2MDg4OTEwZDY3Yzk5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTFmYjBmNmFlYWY0ZDg0Yjc2NjE5MmQ3NzhjMzA5My5iaW5kUG9wdXAocG9wdXBfYThlYWE1NjU5YzIzNDBmMTgxNjZmOGQyOTZmMzRlYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjgxNGM5YzFhZTcwNGM0YWIwMmMwZWQ0MzIxMDVkM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTEyNDM0NDE5MTkwNCwtNzMuNzU5MjUwMDkzMzU1OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWEyOTRlYmNhYzZlNDE1NzllMzQxMjJmODU5ZmI3MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDg5NmNkMWRjODE4NDE3YmE5OTcxMjhiMGMyNmNhMzEgPSAkKCc8ZGl2IGlkPSJodG1sXzA4OTZjZDFkYzgxODQxN2JhOTk3MTI4YjBjMjZjYTMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsaXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhMjk0ZWJjYWM2ZTQxNTc5ZTM0MTIyZjg1OWZiNzM4LnNldENvbnRlbnQoaHRtbF8wODk2Y2QxZGM4MTg0MTdiYTk5NzEyOGIwYzI2Y2EzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yODE0YzljMWFlNzA0YzRhYjAyYzBlZDQzMjEwNWQzYy5iaW5kUG9wdXAocG9wdXBfMWEyOTRlYmNhYzZlNDE1NzllMzQxMjJmODU5ZmI3MzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDcxOTcwODI2ZGQ4NGY4YTg3ZTY2ZjNhZTA2YWI0OTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTY5MTEyNTM3ODk4ODUsLTczLjc5MDQyNjEzMTM1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc4OTQ4Yzg4NGVhNDA5YmE3OGZiMDgzMDVjOTRmYWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJiNDNkMTExZTIwNDRmMGFmZWZkNTI2Y2NjMTY5YjEgPSAkKCc8ZGl2IGlkPSJodG1sXzliYjQzZDExMWUyMDQ0ZjBhZmVmZDUyNmNjYzE2OWIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aCBKYW1haWNhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Nzg5NDhjODg0ZWE0MDliYTc4ZmIwODMwNWM5NGZhYy5zZXRDb250ZW50KGh0bWxfOWJiNDNkMTExZTIwNDRmMGFmZWZkNTI2Y2NjMTY5YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDcxOTcwODI2ZGQ4NGY4YTg3ZTY2ZjNhZTA2YWI0OTguYmluZFBvcHVwKHBvcHVwXzg3ODk0OGM4ODRlYTQwOWJhNzhmYjA4MzA1Yzk0ZmFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViZGZjMDMyMjI5YTQ2MjM5OGMzMTE3ZTc3NTVkMGFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk0NDQ1Mzg1MjIzNTksLTczLjc1ODY3NjAzNzI3NzE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1NGRiOTM3ODdhZDRkNzhiNmNjYjJlYWJiMGNhZWQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlMDc0NWZhZTdmNjQwYWZhNWQ3NzkyMWVhYWFhM2RjID0gJCgnPGRpdiBpZD0iaHRtbF80ZTA3NDVmYWU3ZjY0MGFmYTVkNzc5MjFlYWFhYTNkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QuIEFsYmFuczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDU0ZGI5Mzc4N2FkNGQ3OGI2Y2NiMmVhYmIwY2FlZDYuc2V0Q29udGVudChodG1sXzRlMDc0NWZhZTdmNjQwYWZhNWQ3NzkyMWVhYWFhM2RjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViZGZjMDMyMjI5YTQ2MjM5OGMzMTE3ZTc3NTVkMGFkLmJpbmRQb3B1cChwb3B1cF8wNTRkYjkzNzg3YWQ0ZDc4YjZjY2IyZWFiYjBjYWVkNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hM2UwZDYyYzdiMTQ0MTVmODNkZjAyMTIxZWE4NTRiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTIxMTM5NTkxNzMzLC03My43NzI1ODc4NzYyMDkwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjhjNmI4MTcwYWE0N2Y3OTE2NTcyNmYzYWRkOGYxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YmE5OTEzYmZhMmI0NTMzOTI5MmM1ZmQ3NzI2MWZiMyA9ICQoJzxkaXYgaWQ9Imh0bWxfOWJhOTkxM2JmYTJiNDUzMzkyOTJjNWZkNzcyNjFmYjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvY2hkYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjhjNmI4MTcwYWE0N2Y3OTE2NTcyNmYzYWRkOGYxOC5zZXRDb250ZW50KGh0bWxfOWJhOTkxM2JmYTJiNDUzMzkyOTJjNWZkNzcyNjFmYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTNlMGQ2MmM3YjE0NDE1ZjgzZGYwMjEyMWVhODU0YmEuYmluZFBvcHVwKHBvcHVwXzZmOGM2YjgxNzBhYTQ3Zjc5MTY1NzI2ZjNhZGQ4ZjE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4MTBkNmUxYzBhMDQ4NjdiZWM3NDhhNzI4ODQ5MzU1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY2MjMwNDkwMzY4NTg0LC03My43NjA0MjA5MjY4MjI4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTYzNmQ3YzgyY2M0NDE2YmIzOTAyMTUwMDZiZWIyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjYwNTdhOGI2Mzg0NTY2YTZkMjczZjM5OGVlMDlmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I2MDU3YThiNjM4NDU2NmE2ZDI3M2YzOThlZTA5ZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwcmluZ2ZpZWxkIEdhcmRlbnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlNjM2ZDdjODJjYzQ0MTZiYjM5MDIxNTAwNmJlYjI0LnNldENvbnRlbnQoaHRtbF9jYjYwNTdhOGI2Mzg0NTY2YTZkMjczZjM5OGVlMDlmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ODEwZDZlMWMwYTA0ODY3YmVjNzQ4YTcyODg0OTM1NS5iaW5kUG9wdXAocG9wdXBfOGU2MzZkN2M4MmNjNDQxNmJiMzkwMjE1MDA2YmViMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTg3YzZkMWJhMTE0NDlkM2FjMDM3ZTMyZDM0YmFhY2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTI3NzQ2MzkxNjA4NDUsLTczLjczNTI2ODczNzA4MDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxMjJjY2YxODRiNTQ4MzY4ZDViYjI5OTdmOGFmZTJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4MTc3YmM0ZTlkODQwYjk5N2Y3ZDM2Nzk2YzMwYzU5ID0gJCgnPGRpdiBpZD0iaHRtbF9mODE3N2JjNGU5ZDg0MGI5OTdmN2QzNjc5NmMzMGM1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FtYnJpYSBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTIyY2NmMTg0YjU0ODM2OGQ1YmIyOTk3ZjhhZmUyZC5zZXRDb250ZW50KGh0bWxfZjgxNzdiYzRlOWQ4NDBiOTk3ZjdkMzY3OTZjMzBjNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTg3YzZkMWJhMTE0NDlkM2FjMDM3ZTMyZDM0YmFhY2UuYmluZFBvcHVwKHBvcHVwX2MxMjJjY2YxODRiNTQ4MzY4ZDViYjI5OTdmOGFmZTJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkOGJjZGFiMjNiMzQ3MTdiMzI5YjAzODVkMjhkMTBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjU5ODE2NDMzNDI4MDg0LC03My43MzUyNjA3OTQyODI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNzE5YzBlYzlhYmI0NTg2OThiNzliNjg3MTQ1YjhmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODU2MThiZDUxNDg0NDc2YjNhNGQzZGQ3YmE4YjI3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDg1NjE4YmQ1MTQ4NDQ3NmIzYTRkM2RkN2JhOGIyNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvc2VkYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzE5YzBlYzlhYmI0NTg2OThiNzliNjg3MTQ1YjhmZS5zZXRDb250ZW50KGh0bWxfMDg1NjE4YmQ1MTQ4NDQ3NmIzYTRkM2RkN2JhOGIyNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWQ4YmNkYWIyM2IzNDcxN2IzMjliMDM4NWQyOGQxMGUuYmluZFBvcHVwKHBvcHVwXzE3MTljMGVjOWFiYjQ1ODY5OGI3OWI2ODcxNDViOGZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyNTQ4MjNmMGJkNTRlYzFiYWE5ZGZmZWJhMDcxMmRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjAzMTM0NDMyNTAwODk0LC03My43NTQ5Nzk2ODA0Mzg3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjk5OWU3NmFmZTg0MjliODU0NjE1NWNkZGExMTBhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZTIyZmNhNTA2ZTI0YmJkYWM5NDExNDJhYTg3MDEwMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWUyMmZjYTUwNmUyNGJiZGFjOTQxMTQyYWE4NzAxMDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZhciBSb2NrYXdheTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY5OTllNzZhZmU4NDI5Yjg1NDYxNTVjZGRhMTEwYWYuc2V0Q29udGVudChodG1sXzllMjJmY2E1MDZlMjRiYmRhYzk0MTE0MmFhODcwMTAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YyNTQ4MjNmMGJkNTRlYzFiYWE5ZGZmZWJhMDcxMmRkLmJpbmRQb3B1cChwb3B1cF8wZjk5OWU3NmFmZTg0MjliODU0NjE1NWNkZGExMTBhZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWIzNTIyMGRjOWY0YzVmOGZjMGZkYzBhMDNiMDkwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwMzAyNjU4MzUxMjM4LC03My44MjAwNTQ4OTExMDMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ODUwYmIxZjdjNjQ4MTVhZjdmM2I5YjE1OTJlYjI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMDc0NTc3YmVlYTQ4MTZhNDlkOTVhODM4OGQ2MGE1ID0gJCgnPGRpdiBpZD0iaHRtbF9kYTA3NDU3N2JlZWE0ODE2YTQ5ZDk1YTgzODhkNjBhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWQgQ2hhbm5lbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQ4NTBiYjFmN2M2NDgxNWFmN2YzYjliMTU5MmViMjguc2V0Q29udGVudChodG1sX2RhMDc0NTc3YmVlYTQ4MTZhNDlkOTVhODM4OGQ2MGE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5YjM1MjIwZGM5ZjRjNWY4ZmMwZmRjMGEwM2IwOTA0LmJpbmRQb3B1cChwb3B1cF8xNDg1MGJiMWY3YzY0ODE1YWY3ZjNiOWIxNTkyZWIyOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTY3NjU4ZWRlZTA0NjY4Yjc4MzhmMzZjNmQ0MTcwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU1NzQwMTI4ODQ1NDUyLC03My45MjU1MTE5Njk5NDE2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYjhmMTMwYTE2ODk0YTljYTU1OWRmMGJkNWI5YmI3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjNlMDc0OTRiZTc0NDk3OTUyYmJmY2YzN2U1ODRlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjIzZTA3NDk0YmU3NDQ5Nzk1MmJiZmNmMzdlNTg0ZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyZWV6eSBQb2ludDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmI4ZjEzMGExNjg5NGE5Y2E1NTlkZjBiZDViOWJiN2Uuc2V0Q29udGVudChodG1sX2IyM2UwNzQ5NGJlNzQ0OTc5NTJiYmZjZjM3ZTU4NGVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxNjc2NThlZGVlMDQ2NjhiNzgzOGYzNmM2ZDQxNzA0LmJpbmRQb3B1cChwb3B1cF9mYjhmMTMwYTE2ODk0YTljYTU1OWRmMGJkNWI5YmI3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDdlYzk0MDFjOTU0NGFiODFlZDZkMDI4YTllMmJlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTkyMzAxNTY0Mjg5NiwtNzMuOTAyMjg5NjAzOTE2NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWU2YTVmMmU1NWIwNGQ2ZWE3NDE0ZmI2Mzk1MGQ3ZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjJkZDM4YjY1MzExNDRiODg3YThkZGM5NzI2Mjg0ZDYgPSAkKCc8ZGl2IGlkPSJodG1sX2IyZGQzOGI2NTMxMTQ0Yjg4N2E4ZGRjOTcyNjI4NGQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdGVpbndheTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWU2YTVmMmU1NWIwNGQ2ZWE3NDE0ZmI2Mzk1MGQ3ZTUuc2V0Q29udGVudChodG1sX2IyZGQzOGI2NTMxMTQ0Yjg4N2E4ZGRjOTcyNjI4NGQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZkN2VjOTQwMWM5NTQ0YWI4MWVkNmQwMjhhOWUyYmUzLmJpbmRQb3B1cChwb3B1cF81ZTZhNWYyZTU1YjA0ZDZlYTc0MTRmYjYzOTUwZDdlNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDczN2ExMTBhNmM0NGZkOGRjMjQ2MmUyMDkwNjc1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5Mjc4MTQwMzYwMDQ4LC03My44MDQzNjQ1MTcyMDk4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYTE2MjU0ZWU5ZjI0ZTY1ODE4OTVkN2M1YWIxMTM2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjlhZjYxOTdlNTk0OWQ5YTcxYTQxMDQ5YTc5YTMyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjI5YWY2MTk3ZTU5NDlkOWE3MWE0MTA0OWE3OWEzMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlZWNoaHVyc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhMTYyNTRlZTlmMjRlNjU4MTg5NWQ3YzVhYjExMzY1LnNldENvbnRlbnQoaHRtbF9iMjlhZjYxOTdlNTk0OWQ5YTcxYTQxMDQ5YTc5YTMyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMDczN2ExMTBhNmM0NGZkOGRjMjQ2MmUyMDkwNjc1Yy5iaW5kUG9wdXAocG9wdXBfMWExNjI1NGVlOWYyNGU2NTgxODk1ZDdjNWFiMTEzNjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWJhZWRjYzRmZmYzNDRmYjk1MWY4NzMyODFjZmRhNTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODI4NDI4MDYyNDU1NTQsLTczLjc3NjgwMjIyNjIxNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWUwYTNlYzJiZWE1NDQ0ODg0ZDZmMjM0ZmRmODJlOGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzdhOTAzNDNlYmQ3NGY3MzgxZDQ4NzA5MjEyYzFlZjkgPSAkKCc8ZGl2IGlkPSJodG1sXzc3YTkwMzQzZWJkNzRmNzM4MWQ0ODcwOTIxMmMxZWY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXkgVGVycmFjZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWUwYTNlYzJiZWE1NDQ0ODg0ZDZmMjM0ZmRmODJlOGMuc2V0Q29udGVudChodG1sXzc3YTkwMzQzZWJkNzRmNzM4MWQ0ODcwOTIxMmMxZWY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzViYWVkY2M0ZmZmMzQ0ZmI5NTFmODczMjgxY2ZkYTUyLmJpbmRQb3B1cChwb3B1cF9lZTBhM2VjMmJlYTU0NDQ4ODRkNmYyMzRmZGY4MmU4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzI1NjQ5YzM3NmE0MjZmOThhY2EyYTE2N2IxMmM2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5NTY0MTgwNzM2ODQ5NCwtNzMuNzc2MTMyODIzOTE3MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzFmZGU5NzdlZmVmNGU2MDk5N2ZhMDA2MTYwMWU2ZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGI0MDY0MWMxMDY5NGM2YWIwMDk2MGY0YWI0OTJmOTIgPSAkKCc8ZGl2IGlkPSJodG1sX2RiNDA2NDFjMTA2OTRjNmFiMDA5NjBmNGFiNDkyZjkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZGdlbWVyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzFmZGU5NzdlZmVmNGU2MDk5N2ZhMDA2MTYwMWU2ZjEuc2V0Q29udGVudChodG1sX2RiNDA2NDFjMTA2OTRjNmFiMDA5NjBmNGFiNDkyZjkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzMjU2NDljMzc2YTQyNmY5OGFjYTJhMTY3YjEyYzY4LmJpbmRQb3B1cChwb3B1cF8zMWZkZTk3N2VmZWY0ZTYwOTk3ZmEwMDYxNjAxZTZmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjcyM2RjYTU2MTM0Y2RkOWZlNzk5YzI1ZmQ2MmU3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4OTE0Mzk0MzcyOTcxLC03My43OTE5OTIzMzEzNjk0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YzFmMWJjNzQ0MTQ0YWRhOWU3Y2UyMmFkZDk4NjdiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODIxZmQ3MjEwZTI0Y2E4ODYxMmUyOWUzNDlmNTZmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjgyMWZkNzIxMGUyNGNhODg2MTJlMjllMzQ5ZjU2ZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFydmVybmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjMWYxYmM3NDQxNDRhZGE5ZTdjZTIyYWRkOTg2N2I5LnNldENvbnRlbnQoaHRtbF9iODIxZmQ3MjEwZTI0Y2E4ODYxMmUyOWUzNDlmNTZmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NjcyM2RjYTU2MTM0Y2RkOWZlNzk5YzI1ZmQ2MmU3Ni5iaW5kUG9wdXAocG9wdXBfNmMxZjFiYzc0NDE0NGFkYTllN2NlMjJhZGQ5ODY3YjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDU3ZGZiMTc0MGEwNDQ2Yzk4M2IzMDI4ODhkMDNjZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODI4MDE2OTY4NDU1ODYsLTczLjgyMjM2MTIxMDg4NzUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzY2U4ZGU3YmQyMTRiOGFiMGNhY2VhMjM1ZTRiOTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2YjI0NjdkYzhjZDRlZjk4ODdkNTEzN2RkZTJkNTg0ID0gJCgnPGRpdiBpZD0iaHRtbF9mNmIyNDY3ZGM4Y2Q0ZWY5ODg3ZDUxMzdkZGUyZDU4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9ja2F3YXkgQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzY2U4ZGU3YmQyMTRiOGFiMGNhY2VhMjM1ZTRiOTc0LnNldENvbnRlbnQoaHRtbF9mNmIyNDY3ZGM4Y2Q0ZWY5ODg3ZDUxMzdkZGUyZDU4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTdkZmIxNzQwYTA0NDZjOTgzYjMwMjg4OGQwM2NlNy5iaW5kUG9wdXAocG9wdXBfNjNjZThkZTdiZDIxNGI4YWIwY2FjZWEyMzVlNGI5NzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmY2ZDAwMjFmZjViNDE1MDk1YmY4Y2Y3MjQ3MWI5OTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NzIwMzY3MzAyMTcwMTUsLTczLjg1NzU0NjcyNDEwODI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0NmU1Y2I4YWRhYzRiZWU5N2Y2NzIyMDg0N2VmOTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyYmE0ZGZlOGYyZDQ4MWM4MWZkODJlNjMyMzJlMDk3ID0gJCgnPGRpdiBpZD0iaHRtbF8zMmJhNGRmZThmMmQ0ODFjODFmZDgyZTYzMjMyZTA5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmVwb25zaXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0NmU1Y2I4YWRhYzRiZWU5N2Y2NzIyMDg0N2VmOTU3LnNldENvbnRlbnQoaHRtbF8zMmJhNGRmZThmMmQ0ODFjODFmZDgyZTYzMjMyZTA5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjZkMDAyMWZmNWI0MTUwOTViZjhjZjcyNDcxYjk5NC5iaW5kUG9wdXAocG9wdXBfMTQ2ZTVjYjhhZGFjNGJlZTk3ZjY3MjIwODQ3ZWY5NTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTFiMDMzM2ExNTZlNDU4YWFjMmZiMTNkOTBmMzVhODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjQxMjYxMjI2MTQwNjYsLTczLjgxMjc2MjY5MTM1ODY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlZWVkNDFjNTdkYTQ2NmFiNjlhY2U2Njk2N2UxOWZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlYTQ5YWE3YmNlNTQ1MmM5NWMxMjY0ZjNmYjQ3ZjJhID0gJCgnPGRpdiBpZD0iaHRtbF84ZWE0OWFhN2JjZTU0NTJjOTVjMTI2NGYzZmI0N2YyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TXVycmF5IEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlZWVkNDFjNTdkYTQ2NmFiNjlhY2U2Njk2N2UxOWZlLnNldENvbnRlbnQoaHRtbF84ZWE0OWFhN2JjZTU0NTJjOTVjMTI2NGYzZmI0N2YyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMWIwMzMzYTE1NmU0NThhYWMyZmIxM2Q5MGYzNWE4OS5iaW5kUG9wdXAocG9wdXBfMWVlZWQ0MWM1N2RhNDY2YWI2OWFjZTY2OTY3ZTE5ZmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzI0ZTdjMTBkYjdhNGU1NWIxNmI1N2ZjYTcyMzAzZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDEzNzg0MjE5NDU0MzQsLTczLjcwODg0NzA1ODg5MjQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0MTg4MDFiNmQ3NzRiMmY5ZWU5OTY5YzRlYzJiMTAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlNTg2OTA5ODQ3NTQxYjViZTNlZTFhOTgwMGExNGVkID0gJCgnPGRpdiBpZD0iaHRtbF83ZTU4NjkwOTg0NzU0MWI1YmUzZWUxYTk4MDBhMTRlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmxvcmFsIFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0MTg4MDFiNmQ3NzRiMmY5ZWU5OTY5YzRlYzJiMTAxLnNldENvbnRlbnQoaHRtbF83ZTU4NjkwOTg0NzU0MWI1YmUzZWUxYTk4MDBhMTRlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMjRlN2MxMGRiN2E0ZTU1YjE2YjU3ZmNhNzIzMDNmOS5iaW5kUG9wdXAocG9wdXBfNDQxODgwMWI2ZDc3NGIyZjllZTk5NjljNGVjMmIxMDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjJkYzgwNWY2ZjlmNDlmZWIwMDg2OTc3NjhhZTc5MmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjA5NTcyMDc2NDQ0LC03My43NjcxNDE2NjcxNDcyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGMxZDRlN2EyOTE0NTYyODFkMzcwMzk3YzBmODFiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTBiYmM0ZTU4Nzk0YjBiYTA0NWI5OTY4ZGYwM2ZiYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmUwYmJjNGU1ODc5NGIwYmEwNDViOTk2OGRmMDNmYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxpc3dvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4YzFkNGU3YTI5MTQ1NjI4MWQzNzAzOTdjMGY4MWI1LnNldENvbnRlbnQoaHRtbF9iZTBiYmM0ZTU4Nzk0YjBiYTA0NWI5OTY4ZGYwM2ZiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMmRjODA1ZjZmOWY0OWZlYjAwODY5Nzc2OGFlNzkyZi5iaW5kUG9wdXAocG9wdXBfZjhjMWQ0ZTdhMjkxNDU2MjgxZDM3MDM5N2MwZjgxYjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTk1ZjAzZjNhMTNjNGQ2YzgzYTQ0MTU4MGY3NzEzNjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTY4MDQ4MzAxNDYxMywtNzMuNzg3MjI2OTY5MzY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMmFmZWZmY2M2NWI0ZWI4OWEzMjQ2Mzk2NTIwOTc3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MDgwNTNhY2Q5Mjk0NTIyODAzNzI3ZDg0ZTY4OTRmNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjA4MDUzYWNkOTI5NDUyMjgwMzcyN2Q4NGU2ODk0ZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphbWFpY2EgRXN0YXRlczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJhZmVmZmNjNjViNGViODlhMzI0NjM5NjUyMDk3N2Quc2V0Q29udGVudChodG1sXzYwODA1M2FjZDkyOTQ1MjI4MDM3MjdkODRlNjg5NGY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U5NWYwM2YzYTEzYzRkNmM4M2E0NDE1ODBmNzcxMzYxLmJpbmRQb3B1cChwb3B1cF8yMmFmZWZmY2M2NWI0ZWI4OWEzMjQ2Mzk2NTIwOTc3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOGM2NTFkNWVkY2Q0MTE0YjIwY2FiYjA5ZjNmZjBjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDU3MjMwOTI4NjcsLTczLjgyNTgwOTE1MTEwNTU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzZGVjODNhOGFiMzQ0NzlhM2IzNWE3MzI3NzA1YmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0N2VjMDBhMTIzNjQ2MDdiNzJjMDNiZjFhOTEyZjViID0gJCgnPGRpdiBpZD0iaHRtbF83NDdlYzAwYTEyMzY0NjA3YjcyYzAzYmYxYTkxMmY1YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UXVlZW5zYm9ybyBIaWxsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lM2RlYzgzYThhYjM0NDc5YTNiMzVhNzMyNzcwNWJmNC5zZXRDb250ZW50KGh0bWxfNzQ3ZWMwMGExMjM2NDYwN2I3MmMwM2JmMWE5MTJmNWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzhjNjUxZDVlZGNkNDExNGIyMGNhYmIwOWYzZmYwY2UuYmluZFBvcHVwKHBvcHVwX2UzZGVjODNhOGFiMzQ0NzlhM2IzNWE3MzI3NzA1YmY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmNmFkY2NiYTBkZDRhMjU4MTlmOTQzMDk3ZmIzODJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzODI0OTAxODI5MjA0LC03My43OTc2MDMwMDkxMjY3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MGQyZTk5NThjOTI0MWI3OWQ3NGYzMmUxZDM5MGU2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZjM2ZTkxOTIzYzA0ZDcxOWJkMTZjOWRmZTQ0Nzc2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWYzNmU5MTkyM2MwNGQ3MTliZDE2YzlkZmU0NDc3NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpbGxjcmVzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBkMmU5OTU4YzkyNDFiNzlkNzRmMzJlMWQzOTBlNjIuc2V0Q29udGVudChodG1sXzFmMzZlOTE5MjNjMDRkNzE5YmQxNmM5ZGZlNDQ3NzZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmNmFkY2NiYTBkZDRhMjU4MTlmOTQzMDk3ZmIzODJhLmJpbmRQb3B1cChwb3B1cF84MGQyZTk5NThjOTI0MWI3OWQ3NGYzMmUxZDM5MGU2Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzU4MmZjM2U1ODQ0MjcwOTkzOWNlYjI5YjE2ZTM1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MTcwNDUyNjA1NDE0NiwtNzMuOTMxNTc1MDYwNzI4NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmRhNjM1ZDMxMGNiNDZjMmEwOTY2YTgzY2Y0MmQ0NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTA2NDU0MjJiNGRkNDVmN2I2NDMyNjcyYzkzYmQ2ZDEgPSAkKCc8ZGl2IGlkPSJodG1sX2EwNjQ1NDIyYjRkZDQ1ZjdiNjQzMjY3MmM5M2JkNmQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYXZlbnN3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGE2MzVkMzEwY2I0NmMyYTA5NjZhODNjZjQyZDQ2OC5zZXRDb250ZW50KGh0bWxfYTA2NDU0MjJiNGRkNDVmN2I2NDMyNjcyYzkzYmQ2ZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjM1ODJmYzNlNTg0NDI3MDk5MzljZWIyOWIxNmUzNTAuYmluZFBvcHVwKHBvcHVwXzZkYTYzNWQzMTBjYjQ2YzJhMDk2NmE4M2NmNDJkNDY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5NGExYTM2YzYxMDRjZGI5MjUwMmU5YjZiNjlmZjViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjYzOTE4NDE5MjUxMzksLTczLjg0OTYzNzgyNDAyNDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2OTMwMmQ0YjU0NDRjYjM4ZjM0YTQ5ZDA5ZGNjZTA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiN2E4OGMyZDdmMjQ3YWM5NmJlOGFiYTRlN2ZhNjg3ID0gJCgnPGRpdiBpZD0iaHRtbF8wYjdhODhjMmQ3ZjI0N2FjOTZiZThhYmE0ZTdmYTY4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGluZGVud29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjY5MzAyZDRiNTQ0NGNiMzhmMzRhNDlkMDlkY2NlMDguc2V0Q29udGVudChodG1sXzBiN2E4OGMyZDdmMjQ3YWM5NmJlOGFiYTRlN2ZhNjg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5NGExYTM2YzYxMDRjZGI5MjUwMmU5YjZiNjlmZjViLmJpbmRQb3B1cChwb3B1cF9mNjkzMDJkNGI1NDQ0Y2IzOGYzNGE0OWQwOWRjY2UwOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDY2MzM3OGM2YWQ0YmNiYjUyZGYzNWUwN2ZkZGIwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2Nzg4Mzg5NjYwMjQ3LC03My43NDAyNTYwNzk4OTgyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODcwYjU4Y2Q2NTk0ZDZjOTVlNDg4YTVmYWQ3NDE2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNmVjYmJiMDg5YmM0MmJlYmRkNzJiNzIzY2Y0YzE1ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzZlY2JiYjA4OWJjNDJiZWJkZDcyYjcyM2NmNGMxNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhdXJlbHRvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg3MGI1OGNkNjU5NGQ2Yzk1ZTQ4OGE1ZmFkNzQxNjkuc2V0Q29udGVudChodG1sXzM2ZWNiYmIwODliYzQyYmViZGQ3MmI3MjNjZjRjMTVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwNjYzMzc4YzZhZDRiY2JiNTJkZjM1ZTA3ZmRkYjBiLmJpbmRQb3B1cChwb3B1cF9jODcwYjU4Y2Q2NTk0ZDZjOTVlNDg4YTVmYWQ3NDE2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYThiYzAzNjdlMGM0ZmUxYTA3NzJiNzZkMDcwOGJhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNjA3NDU3MDgzMDc5NSwtNzMuODYyNTI0NzE0MTM3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMzI1ZDQ1Y2Q5NzQ0YzJlYjJmYjJiNjk2ODc1MzQ1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZmUyMmQ4ZWE3ZDg0YjkxOTYyOTljODAxYWE1NTY2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGZlMjJkOGVhN2Q4NGI5MTk2Mjk5YzgwMWFhNTU2NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlZnJhayBDaXR5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMzI1ZDQ1Y2Q5NzQ0YzJlYjJmYjJiNjk2ODc1MzQ1Mi5zZXRDb250ZW50KGh0bWxfNGZlMjJkOGVhN2Q4NGI5MTk2Mjk5YzgwMWFhNTU2NmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmE4YmMwMzY3ZTBjNGZlMWEwNzcyYjc2ZDA3MDhiYWYuYmluZFBvcHVwKHBvcHVwXzEzMjVkNDVjZDk3NDRjMmViMmZiMmI2OTY4NzUzNDUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjODMzY2M4YmVhYzQ2NzhhNWMyOWI0MGMyODE1MjlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTc2MTU1NTY1NDMxMDksLTczLjg1NDAxNzUwMzkyNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDJkNjI1YzdkODhmNGU2ODkyODJjZDk1YmVlNGRhZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTNhNTk4OTU5OTkwNDdjMTkxYzgyMTFiOGVjMzI2OWYgPSAkKCc8ZGl2IGlkPSJodG1sX2EzYTU5ODk1OTk5MDQ3YzE5MWM4MjExYjhlYzMyNjlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWxsZSBIYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyZDYyNWM3ZDg4ZjRlNjg5MjgyY2Q5NWJlZTRkYWRkLnNldENvbnRlbnQoaHRtbF9hM2E1OTg5NTk5OTA0N2MxOTFjODIxMWI4ZWMzMjY5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzgzM2NjOGJlYWM0Njc4YTVjMjliNDBjMjgxNTI5Zi5iaW5kUG9wdXAocG9wdXBfNDJkNjI1YzdkODhmNGU2ODkyODJjZDk1YmVlNGRhZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjAwZWM2MGQzNTgyNDdhYTgzZTI4NmE0YWUwYmEyODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODAzNDI5NTY0NjEzMSwtNzMuODQxNTMzNzAyMjYxODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGYzYWJiMmE5MmZjNDJhOTk5NGRmM2UyZjk5NzE5NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQ4Y2RjODA0NWMwNDg2NmFjZGUxMGU1OTEzY2ZlOTIgPSAkKCc8ZGl2IGlkPSJodG1sXzVkOGNkYzgwNDVjMDQ4NjZhY2RlMTBlNTkxM2NmZTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb2NrYXdheSBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjNhYmIyYTkyZmM0MmE5OTk0ZGYzZTJmOTk3MTk2NC5zZXRDb250ZW50KGh0bWxfNWQ4Y2RjODA0NWMwNDg2NmFjZGUxMGU1OTEzY2ZlOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjAwZWM2MGQzNTgyNDdhYTgzZTI4NmE0YWUwYmEyODAuYmluZFBvcHVwKHBvcHVwXzBmM2FiYjJhOTJmYzQyYTk5OTRkZjNlMmY5OTcxOTY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiNTI3YmUxZjg0YTRkOTQ4Nzc2NjNiZjczOTAzNjZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTk3NzEwNjE1NjU3NjgsLTczLjc5NjY0NzUwODQ0MDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3ZWEzMjllNGNiODRkNzE4NmM3NzUwNTVmYTg2NTgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYjQ4ZWUwYzExODQ1ZTM4MmU4YTQzMTJhZGU4NGViID0gJCgnPGRpdiBpZD0iaHRtbF8zMWI0OGVlMGMxMTg0NWUzODJlOGE0MzEyYWRlODRlYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U29tZXJ2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdlYTMyOWU0Y2I4NGQ3MTg2Yzc3NTA1NWZhODY1ODAuc2V0Q29udGVudChodG1sXzMxYjQ4ZWUwYzExODQ1ZTM4MmU4YTQzMTJhZGU4NGViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiNTI3YmUxZjg0YTRkOTQ4Nzc2NjNiZjczOTAzNjZkLmJpbmRQb3B1cChwb3B1cF8yN2VhMzI5ZTRjYjg0ZDcxODZjNzc1MDU1ZmE4NjU4MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzQzNDAyNjRiNGQ0ODgzYmE0MTM5OTAwMDAxNWNlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2MDAwMzIyNzMzNjEzLC03My43NTE3NTMxMDczMTE1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTU5NTQyZTFhNjM0NWM4YmNmOWY4OTIzYzkzNmNjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NGQ4NWViNjJjNDM0Zjk2YTllZjJjM2ZiN2VmMzExOSA9ICQoJzxkaXYgaWQ9Imh0bWxfODRkODVlYjYyYzQzNGY5NmE5ZWYyYzNmYjdlZjMxMTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb29rdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhNTk1NDJlMWE2MzQ1YzhiY2Y5Zjg5MjNjOTM2Y2M3LnNldENvbnRlbnQoaHRtbF84NGQ4NWViNjJjNDM0Zjk2YTllZjJjM2ZiN2VmMzExOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYzQzNDAyNjRiNGQ0ODgzYmE0MTM5OTAwMDAxNWNlYi5iaW5kUG9wdXAocG9wdXBfMmE1OTU0MmUxYTYzNDVjOGJjZjlmODkyM2M5MzZjYzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZkOTBmNzM5ZTQ4NDEyZWJmY2EwN2M3MDgxMmRiOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzMwMTQwNDAyNzgzNCwtNzMuNzM4ODkxOTg5MTI0ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjA4ZTYwNTA1NWFmNDYwMGFmNDNlMjZjNmI0OTgzNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDZhZWU2YjdmZTU1NGMwYmFiZTAyMTMxYTg2MzAxOTggPSAkKCc8ZGl2IGlkPSJodG1sXzA2YWVlNmI3ZmU1NTRjMGJhYmUwMjEzMWE4NjMwMTk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWxsYWlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjA4ZTYwNTA1NWFmNDYwMGFmNDNlMjZjNmI0OTgzNzUuc2V0Q29udGVudChodG1sXzA2YWVlNmI3ZmU1NTRjMGJhYmUwMjEzMWE4NjMwMTk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdmZDkwZjczOWU0ODQxMmViZmNhMDdjNzA4MTJkYjllLmJpbmRQb3B1cChwb3B1cF9iMDhlNjA1MDU1YWY0NjAwYWY0M2UyNmM2YjQ5ODM3NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjQyY2UyYzc3NGQ0MzEzYWIyOGZjY2E2MmIyOTdjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDA3MDk5OTA0ODksLTczLjg1NzUxNzkwNjc2NDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyYmMyZTQyZjNhMjQ0OTU4NjBhMmY5YzJhN2U1N2QxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3ODcxNzUzY2FmMzRlNWU4Y2I4MGFkNmVhMmZjNjEzID0gJCgnPGRpdiBpZD0iaHRtbF9mNzg3MTc1M2NhZjM0ZTVlOGNiODBhZDZlYTJmYzYxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGggQ29yb25hPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMmJjMmU0MmYzYTI0NDk1ODYwYTJmOWMyYTdlNTdkMS5zZXRDb250ZW50KGh0bWxfZjc4NzE3NTNjYWYzNGU1ZThjYjgwYWQ2ZWEyZmM2MTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y0MmNlMmM3NzRkNDMxM2FiMjhmY2NhNjJiMjk3Y2MuYmluZFBvcHVwKHBvcHVwXzMyYmMyZTQyZjNhMjQ0OTU4NjBhMmY5YzJhN2U1N2QxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1ZjhhNWQ2NzQ4NjRmYmZhNDhlNjhhMTdiOTVjZmNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0NjExMDgxNTExNywtNzMuODQxMDIyMTEyMzQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjQ1MGZiOGQ5OWM0MzI4ODllZWU0NDU0YWU4N2U1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTFjZDVhMWI4ZmY0NjgyODNjNTMyMDM4Y2M5OTYyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzExY2Q1YTFiOGZmNDY4MjgzYzUzMjAzOGNjOTk2MmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZvcmVzdCBIaWxscyBHYXJkZW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjQ1MGZiOGQ5OWM0MzI4ODllZWU0NDU0YWU4N2U1Yi5zZXRDb250ZW50KGh0bWxfYzExY2Q1YTFiOGZmNDY4MjgzYzUzMjAzOGNjOTk2MmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTVmOGE1ZDY3NDg2NGZiZmE0OGU2OGExN2I5NWNmY2QuYmluZFBvcHVwKHBvcHVwX2VmNDUwZmI4ZDk5YzQzMjg4OWVlZTQ0NTRhZTg3ZTViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1ODNmM2RhM2IyZTQ3MGY5NWJkOTRmZTVmMGZkMTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ0OTgxNTcxMDA0NCwtNzQuMDc5MzUzMTI1MTI3OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjk1YzQxNWZhMmU5NDM1OWFlOWEzMTM5ZTAwZTQyNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzc2Y2YxNDQxOTJlNDZkNmI5YzdiNDU2ZjBjN2I4ZmEgPSAkKCc8ZGl2IGlkPSJodG1sXzc3NmNmMTQ0MTkyZTQ2ZDZiOWM3YjQ1NmYwYzdiOGZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gR2VvcmdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOTVjNDE1ZmEyZTk0MzU5YWU5YTMxMzllMDBlNDI1Yi5zZXRDb250ZW50KGh0bWxfNzc2Y2YxNDQxOTJlNDZkNmI5YzdiNDU2ZjBjN2I4ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTU4M2YzZGEzYjJlNDcwZjk1YmQ5NGZlNWYwZmQxODIuYmluZFBvcHVwKHBvcHVwX2I5NWM0MTVmYTJlOTQzNTlhZTlhMzEzOWUwMGU0MjViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1MTE0NzFhNjBlYTQ2Y2RiZDJjZDY5ODVhNmJlODllID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQwNjE0NTU5MTM1MTEsLTc0LjA4NzAxNjUwNTE2NjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyM2NhOWUwMDU3MTQyZjNhZGEzODI3YzRlMDdkNDU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5OGFlODgwNGJlNzQzNGRhNDJkMmJjZmFiN2IwZWYzID0gJCgnPGRpdiBpZD0iaHRtbF82OThhZTg4MDRiZTc0MzRkYTQyZDJiY2ZhYjdiMGVmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IEJyaWdodG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MjNjYTllMDA1NzE0MmYzYWRhMzgyN2M0ZTA3ZDQ1Ny5zZXRDb250ZW50KGh0bWxfNjk4YWU4ODA0YmU3NDM0ZGE0MmQyYmNmYWI3YjBlZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDUxMTQ3MWE2MGVhNDZjZGJkMmNkNjk4NWE2YmU4OWUuYmluZFBvcHVwKHBvcHVwXzkyM2NhOWUwMDU3MTQyZjNhZGEzODI3YzRlMDdkNDU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlNzZkMjY5NDA4ZTQ5NzY4MTA3MmM5NGI4ODllNmIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjI2OTI3NjI1MzgxNzYsLTc0LjA3NzkwMTkyNjYwMDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmYTI4YTA1NTAxNjQ0MWRhYTdiMTdiM2JmNTU5ZDg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3ZDNlMzhmNmNlNzQwZGVhZDk4MGUwMTk1MzRiOGRiID0gJCgnPGRpdiBpZD0iaHRtbF80N2QzZTM4ZjZjZTc0MGRlYWQ5ODBlMDE5NTM0YjhkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhcGxldG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZmEyOGEwNTUwMTY0NDFkYWE3YjE3YjNiZjU1OWQ4Ny5zZXRDb250ZW50KGh0bWxfNDdkM2UzOGY2Y2U3NDBkZWFkOTgwZTAxOTUzNGI4ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGU3NmQyNjk0MDhlNDk3NjgxMDcyYzk0Yjg4OWU2YjIuYmluZFBvcHVwKHBvcHVwXzRmYTI4YTA1NTAxNjQ0MWRhYTdiMTdiM2JmNTU5ZDg3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiZWQ5ZjMzNmRhNDQ5NDZhN2I5MmEzZjlkMjgxOGVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE1MzA0OTQ2NTI3NjEsLTc0LjA2OTgwNTI2NzE2MTQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiYzcxM2QxZGVmMjRiNDc5ZWFiYTRmMTQzMGVmNDk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllMDc5ZDU4MjljZDQyN2JhMDJhZmU2ODAxMDY3MmQ2ID0gJCgnPGRpdiBpZD0iaHRtbF85ZTA3OWQ1ODI5Y2Q0MjdiYTAyYWZlNjgwMTA2NzJkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9zZWJhbms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiYzcxM2QxZGVmMjRiNDc5ZWFiYTRmMTQzMGVmNDk5LnNldENvbnRlbnQoaHRtbF85ZTA3OWQ1ODI5Y2Q0MjdiYTAyYWZlNjgwMTA2NzJkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YmVkOWYzMzZkYTQ0OTQ2YTdiOTJhM2Y5ZDI4MThlYy5iaW5kUG9wdXAocG9wdXBfY2JjNzEzZDFkZWYyNGI0NzllYWJhNGYxNDMwZWY0OTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjg2NTlkNzM0NzEwNDEyMGIyZWU3Njc5M2YyMmM0ZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzE4Nzg5MjY1NDYwNywtNzQuMTA3MTgxNzgyNjU2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNGFmZjdkMTdhNmY0ODEzYmQ5NGU2YjIwNDc1Yzc3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjI3NTVmM2U4M2Y0OWY2OGI5NmI1YmYyNTY5NmE3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTIyNzU1ZjNlODNmNDlmNjhiOTZiNWJmMjU2OTZhNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgQnJpZ2h0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0YWZmN2QxN2E2ZjQ4MTNiZDk0ZTZiMjA0NzVjNzczLnNldENvbnRlbnQoaHRtbF81MjI3NTVmM2U4M2Y0OWY2OGI5NmI1YmYyNTY5NmE3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mODY1OWQ3MzQ3MTA0MTIwYjJlZTc2NzkzZjIyYzRkOC5iaW5kUG9wdXAocG9wdXBfYjRhZmY3ZDE3YTZmNDgxM2JkOTRlNmIyMDQ3NWM3NzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2UzNjZhMzg3ZGFkNGJmNTk4MDViNWUyOWFkNDIwMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjQxODQ3OTEzMTMwMDYsLTc0LjA4NzI0ODE5OTgzNzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UyNDg3YjMwMzQ0MjRmN2FhNDU4ZDBkZDNjMWU5NGM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjMGQyOWMzMTQxODRhYTY4YWQwNzU4NTEwNjE1OWZiID0gJCgnPGRpdiBpZD0iaHRtbF9mYzBkMjljMzE0MTg0YWE2OGFkMDc1ODUxMDYxNTlmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3J5bWVzIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyNDg3YjMwMzQ0MjRmN2FhNDU4ZDBkZDNjMWU5NGM3LnNldENvbnRlbnQoaHRtbF9mYzBkMjljMzE0MTg0YWE2OGFkMDc1ODUxMDYxNTlmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZTM2NmEzODdkYWQ0YmY1OTgwNWI1ZTI5YWQ0MjAxOS5iaW5kUG9wdXAocG9wdXBfZTI0ODdiMzAzNDQyNGY3YWE0NThkMGRkM2MxZTk0YzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI2N2E1YzQxMjBkNDhlM2JlODE1NzUwMWNmMjRhNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTcwNjg1MTgxNDY3MywtNzQuMTExMzI4ODE4MDA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MGJiMGIxNjk5MmI0MWNiYTIwMTE3ZDM3MTk4NjE0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzllOTM0MjkxMDE0ZTI3YTY0ZTg4ZjA3Mzc3Y2UzNCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2M5ZTkzNDI5MTAxNGUyN2E2NGU4OGYwNzM3N2NlMzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvZHQgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTBiYjBiMTY5OTJiNDFjYmEyMDExN2QzNzE5ODYxNDcuc2V0Q29udGVudChodG1sXzNjOWU5MzQyOTEwMTRlMjdhNjRlODhmMDczNzdjZTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiNjdhNWM0MTIwZDQ4ZTNiZTgxNTc1MDFjZjI0YTRiLmJpbmRQb3B1cChwb3B1cF85MGJiMGIxNjk5MmI0MWNiYTIwMTE3ZDM3MTk4NjE0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNzY3NzBhODAzMzA0Zjk2YTQzYWZiMmI5NTdkYzBmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4MDI0NzQxMzUwOTU2LC03NC4wNzk1NTI5MjUzOTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxYjA1MzdkMjMzZDQ3ZTRiNGZmNzBhODUzNTQ2OTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzOTNiNzJkZTIxMDRmYzE4OGUxYjhlYjUwODYxMTQwID0gJCgnPGRpdiBpZD0iaHRtbF8zMzkzYjcyZGUyMTA0ZmMxODhlMWI4ZWI1MDg2MTE0MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGggQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxYjA1MzdkMjMzZDQ3ZTRiNGZmNzBhODUzNTQ2OTUxLnNldENvbnRlbnQoaHRtbF8zMzkzYjcyZGUyMTA0ZmMxODhlMWI4ZWI1MDg2MTE0MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNzY3NzBhODAzMzA0Zjk2YTQzYWZiMmI5NTdkYzBmZi5iaW5kUG9wdXAocG9wdXBfYzFiMDUzN2QyMzNkNDdlNGI0ZmY3MGE4NTM1NDY5NTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWJlN2U5NDc1OTA2NDA3OTliZjcxZjkxYTQ1N2Y3Y2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzM2NjkzMDU1NDM2NSwtNzQuMTI5NDM0MjY3OTcwMDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTRjZDIyYWE0MGRkNGY4OWJjZTQxMTU1ZmYzZjY1YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjU0MDQ2NmRlMGE2NDJjZGExZmRjZDAxMDY1ZDZiODIgPSAkKCc8ZGl2IGlkPSJodG1sXzY1NDA0NjZkZTBhNjQyY2RhMWZkY2QwMTA2NWQ2YjgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qb3J0IFJpY2htb25kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NGNkMjJhYTQwZGQ0Zjg5YmNlNDExNTVmZjNmNjViOS5zZXRDb250ZW50KGh0bWxfNjU0MDQ2NmRlMGE2NDJjZGExZmRjZDAxMDY1ZDZiODIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJlN2U5NDc1OTA2NDA3OTliZjcxZjkxYTQ1N2Y3Y2MuYmluZFBvcHVwKHBvcHVwXzU0Y2QyMmFhNDBkZDRmODliY2U0MTE1NWZmM2Y2NWI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3YTIxZDZiMTZhNTQxNTViNTY0ZTRiMzJiNTM0ZGJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMyNTQ2MzkwNDgxMTI0LC03NC4xNTAwODUzNzA0Njk4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYmVkNmRkMmE2OWI0ZjBlOTRmYTU3MTA1Y2ZmZjYzNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzk1ZTU0MWVlYTc0Nzg5ODk2ZmNlYjBkMWEwYWY3NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzc5NWU1NDFlZWE3NDc4OTg5NmZjZWIwZDFhMGFmNzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmluZXImIzM5O3MgSGFyYm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYmVkNmRkMmE2OWI0ZjBlOTRmYTU3MTA1Y2ZmZjYzNi5zZXRDb250ZW50KGh0bWxfYzc5NWU1NDFlZWE3NDc4OTg5NmZjZWIwZDFhMGFmNzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTdhMjFkNmIxNmE1NDE1NWI1NjRlNGIzMmI1MzRkYmQuYmluZFBvcHVwKHBvcHVwX2JiZWQ2ZGQyYTY5YjRmMGU5NGZhNTcxMDVjZmZmNjM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1NTA5NTkyZGVjMjRjZmVhMDdjYTZhMWNjNDcyNDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjM5NjgyOTc4NDU1NDIsLTc0LjE3NDY0NTMyOTkzNTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhhNjczM2UzMTgyOTQwYzVhMjQzNmFlYTFmYmNmNWM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QwZmRlOGJjYzg1NjQ1N2FiZTcyZmM1YjRmNDBlMWY3ID0gJCgnPGRpdiBpZD0iaHRtbF9kMGZkZThiY2M4NTY0NTdhYmU3MmZjNWI0ZjQwZTFmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UG9ydCBJdm9yeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGE2NzMzZTMxODI5NDBjNWEyNDM2YWVhMWZiY2Y1Yzcuc2V0Q29udGVudChodG1sX2QwZmRlOGJjYzg1NjQ1N2FiZTcyZmM1YjRmNDBlMWY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1NTA5NTkyZGVjMjRjZmVhMDdjYTZhMWNjNDcyNDZkLmJpbmRQb3B1cChwb3B1cF84YTY3MzNlMzE4Mjk0MGM1YTI0MzZhZWExZmJjZjVjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMWQ1OTNjODM3Nzk0N2ZhODk2YmYyMjM1MmQwZjhkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYxMzMzNTkzNzY2NzQyLC03NC4xMTkxODA1ODUzNDg0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lODRlMDNlZTY3OGY0MDA1ODE1M2FlMDU2Y2M0NzFlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTAxYzUwNTZkODY0MTBlOTRjOWMyNDhhYjcwNWJkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTEwMWM1MDU2ZDg2NDEwZTk0YzljMjQ4YWI3MDViZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhc3RsZXRvbiBDb3JuZXJzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODRlMDNlZTY3OGY0MDA1ODE1M2FlMDU2Y2M0NzFlMy5zZXRDb250ZW50KGh0bWxfYTEwMWM1MDU2ZDg2NDEwZTk0YzljMjQ4YWI3MDViZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjFkNTkzYzgzNzc5NDdmYTg5NmJmMjIzNTJkMGY4ZDkuYmluZFBvcHVwKHBvcHVwX2U4NGUwM2VlNjc4ZjQwMDU4MTUzYWUwNTZjYzQ3MWUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4NWViMTQ5MjRiZDQ1ZTU5YWZkMTc3ODFlM2JmYmI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTk0MjUyMzc5MTYxNjk1LC03NC4xNjQ5NjAzMTMyOTgyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Zjk5NzcxNzJhZjY0ZjZkODEwZGRiMWViYTNjOWZjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZWQ1ZjUxYTBjMjY0YzRjYWE3ZWEwNjVkZDczYWMxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfOWVkNWY1MWEwYzI2NGM0Y2FhN2VhMDY1ZGQ3M2FjMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBTcHJpbmd2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGY5OTc3MTcyYWY2NGY2ZDgxMGRkYjFlYmEzYzlmYzYuc2V0Q29udGVudChodG1sXzllZDVmNTFhMGMyNjRjNGNhYTdlYTA2NWRkNzNhYzEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4NWViMTQ5MjRiZDQ1ZTU5YWZkMTc3ODFlM2JmYmI5LmJpbmRQb3B1cChwb3B1cF80Zjk5NzcxNzJhZjY0ZjZkODEwZGRiMWViYTNjOWZjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMWE4ODA0ODA5Nzg0OTllOTAwYWJmYTE2N2EyMGFkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4NjMxMzc1MTAzMjgxLC03NC4xOTA3MzcxNzUzODExNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDczM2QyNDA5MTE0NGIxODM5OGFhZDg1YzdkNTY2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNzZhN2IxNGNlMDc0YTcwYmY1NWUyNDU2ZWZjYTY3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTc2YTdiMTRjZTA3NGE3MGJmNTVlMjQ1NmVmY2E2N2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyYXZpczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ3MzNkMjQwOTExNDRiMTgzOThhYWQ4NWM3ZDU2NmQuc2V0Q29udGVudChodG1sX2U3NmE3YjE0Y2UwNzRhNzBiZjU1ZTI0NTZlZmNhNjdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxYTg4MDQ4MDk3ODQ5OWU5MDBhYmZhMTY3YTIwYWQ3LmJpbmRQb3B1cChwb3B1cF80NDczM2QyNDA5MTE0NGIxODM5OGFhZDg1YzdkNTY2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTA0ODQ4ODI2MTA0YmRmYTljNzZiYTEwZDQzMjgwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3MjU3MjMxODIwNjMyLC03NC4xMTY0Nzk0MzYwNjM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhNTdiNmFlNTRiNDRkYzY5MTQ3ZTAwMDIxMGMwNGY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyNGQzODU5MmQyOTRlOTE5MGM3YWY3NTYyMjQ5NzYyID0gJCgnPGRpdiBpZD0iaHRtbF8yMjRkMzg1OTJkMjk0ZTkxOTBjN2FmNzU2MjI0OTc2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IERvcnA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNTdiNmFlNTRiNDRkYzY5MTQ3ZTAwMDIxMGMwNGY3LnNldENvbnRlbnQoaHRtbF8yMjRkMzg1OTJkMjk0ZTkxOTBjN2FmNzU2MjI0OTc2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTA0ODQ4ODI2MTA0YmRmYTljNzZiYTEwZDQzMjgwMy5iaW5kUG9wdXAocG9wdXBfYWE1N2I2YWU1NGI0NGRjNjkxNDdlMDAwMjEwYzA0ZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDMzOTUwZDI4MTQ0NGRjODgzNGFkZWJmMzU0ZDM0N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NTg0NjIyNDMyODg4LC03NC4xMjE1NjU5Mzc3MTg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjY1ZDY0MTM3NTU0ZDg0YmNkYzgzZWIyZGIzYWE3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzNkNjhjNDc3NzY0NDgzOGExZmFhMTk3Yjc3YjM1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzMzZDY4YzQ3Nzc2NDQ4MzhhMWZhYTE5N2I3N2IzNTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9ha3dvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2NjVkNjQxMzc1NTRkODRiY2RjODNlYjJkYjNhYTcwLnNldENvbnRlbnQoaHRtbF9jMzNkNjhjNDc3NzY0NDgzOGExZmFhMTk3Yjc3YjM1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MzM5NTBkMjgxNDQ0ZGM4ODM0YWRlYmYzNTRkMzQ3Yi5iaW5kUG9wdXAocG9wdXBfNjY2NWQ2NDEzNzU1NGQ4NGJjZGM4M2ViMmRiM2FhNzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGMyNWQ4NjMxOGQ0NDhmN2JiMzc0NzM1Zjg5YzUxMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDk0ODAyMjg3MTM2MDUsLTc0LjE0OTMyMzgxNDkwOTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyMGI5YzM3ZDc1YjQyYWRiYWEzZmY5ZTZjNWJlNzc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4NTc5OGMyMDM5MDQwMWFhNmJiNWRjYjE2MDQ2MjI5ID0gJCgnPGRpdiBpZD0iaHRtbF9mODU3OThjMjAzOTA0MDFhYTZiYjVkY2IxNjA0NjIyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlYXQgS2lsbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyMGI5YzM3ZDc1YjQyYWRiYWEzZmY5ZTZjNWJlNzc3LnNldENvbnRlbnQoaHRtbF9mODU3OThjMjAzOTA0MDFhYTZiYjVkY2IxNjA0NjIyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YzI1ZDg2MzE4ZDQ0OGY3YmIzNzQ3MzVmODljNTEwNS5iaW5kUG9wdXAocG9wdXBfMjIwYjljMzdkNzViNDJhZGJhYTNmZjllNmM1YmU3NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDMzNWE5YmNlZmQxNDM4ZTg2YTJhOTVjNWZhMmM1NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDIyMzA3NDc0NTA3NDUsLTc0LjE2NDMzMDgwNDE5MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWM2ZGE2YTZjODFmNGMzNDhiMDY2YjZhMjVjZjMxM2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU5NDkwYjI3NmFkNGYzZDg1ZGQwNjgxYWRlZmUyNWUgPSAkKCc8ZGl2IGlkPSJodG1sX2JlOTQ5MGIyNzZhZDRmM2Q4NWRkMDY4MWFkZWZlMjVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbHRpbmd2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWM2ZGE2YTZjODFmNGMzNDhiMDY2YjZhMjVjZjMxM2Iuc2V0Q29udGVudChodG1sX2JlOTQ5MGIyNzZhZDRmM2Q4NWRkMDY4MWFkZWZlMjVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzMzVhOWJjZWZkMTQzOGU4NmEyYTk1YzVmYTJjNTUxLmJpbmRQb3B1cChwb3B1cF9lYzZkYTZhNmM4MWY0YzM0OGIwNjZiNmEyNWNmMzEzYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzI0N2JmNzM4M2U0ZDEyYWQ2MzE0MDYzYTNjZWZlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUzODExNDE3NDc0NTA3LC03NC4xNzg1NDg2NjE2NTg3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDQzZWQ1NDg4Y2Y0NDhiYTUzYmViZjZhZThmODkwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hN2FiNDg4YWYyMWE0MWRiODAxMTMzZWZmNzVkMTIxNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTdhYjQ4OGFmMjFhNDFkYjgwMTEzM2VmZjc1ZDEyMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFubmFkYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDQzZWQ1NDg4Y2Y0NDhiYTUzYmViZjZhZThmODkwZC5zZXRDb250ZW50KGh0bWxfYTdhYjQ4OGFmMjFhNDFkYjgwMTEzM2VmZjc1ZDEyMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjMyNDdiZjczODNlNGQxMmFkNjMxNDA2M2EzY2VmZTguYmluZFBvcHVwKHBvcHVwX2EwNDNlZDU0ODhjZjQ0OGJhNTNiZWJmNmFlOGY4OTBkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2NjNmYzJmZjU1NjQwMGNhZTc3OTA3NzdmNTFlN2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTQxOTY3NjIyODg4NzU1LC03NC4yMDUyNDU4MjQ4MDMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTA5MjJhNjMwZmE0ODNlODJmODAxMTQ4NTIwN2Y0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZWEyM2RhOTZjMDQ0MWIwOWNiNDZlZjRiMzU1MjFlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2VhMjNkYTk2YzA0NDFiMDljYjQ2ZWY0YjM1NTIxZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvb2Ryb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlMDkyMmE2MzBmYTQ4M2U4MmY4MDExNDg1MjA3ZjQ2LnNldENvbnRlbnQoaHRtbF8zZWEyM2RhOTZjMDQ0MWIwOWNiNDZlZjRiMzU1MjFlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNjYzZmMyZmY1NTY0MDBjYWU3NzkwNzc3ZjUxZTdmZS5iaW5kUG9wdXAocG9wdXBfNGUwOTIyYTYzMGZhNDgzZTgyZjgwMTE0ODUyMDdmNDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRjMGEyN2E4MGZjNDQ0ZWI4NTE5NGRkZDhmOWM4NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MDUzMzM3NjExNTY0MiwtNzQuMjQ2NTY5MzQyMzUyODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDhkYjUzNDE1ZTFiNGQ3YzlhYTMxMjE2ODIyNzJmYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRhOGViYjU1NzgzNDE2ZDhlYjAyMTI5NTIzZjA3ZTIgPSAkKCc8ZGl2IGlkPSJodG1sXzJkYThlYmI1NTc4MzQxNmQ4ZWIwMjEyOTUyM2YwN2UyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub3R0ZW52aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDhkYjUzNDE1ZTFiNGQ3YzlhYTMxMjE2ODIyNzJmYTAuc2V0Q29udGVudChodG1sXzJkYThlYmI1NTc4MzQxNmQ4ZWIwMjEyOTUyM2YwN2UyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0YzBhMjdhODBmYzQ0NGViODUxOTRkZGQ4ZjljODRjLmJpbmRQb3B1cChwb3B1cF80OGRiNTM0MTVlMWI0ZDdjOWFhMzEyMTY4MjI3MmZhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzljNzYzODk1NmE0YjE4YjgyNjFhYWM5MmE5MzBiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzNzMxNjA2NzExMDMyNiwtNzQuMDgwNTUzNTE3OTAxMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDExZjAxNjgzYTk5NDc2OTk3MGI2NDlkMzlkODJkNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDkwODU5YWYwZGZhNDRjYjliZWJkYTBmNmVjOTFiOTQgPSAkKCc8ZGl2IGlkPSJodG1sXzQ5MDg1OWFmMGRmYTQ0Y2I5YmViZGEwZjZlYzkxYjk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub21wa2luc3ZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTFmMDE2ODNhOTk0NzY5OTcwYjY0OWQzOWQ4MmQ1OS5zZXRDb250ZW50KGh0bWxfNDkwODU5YWYwZGZhNDRjYjliZWJkYTBmNmVjOTFiOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2M5Yzc2Mzg5NTZhNGIxOGI4MjYxYWFjOTJhOTMwYmEuYmluZFBvcHVwKHBvcHVwX2QxMWYwMTY4M2E5OTQ3Njk5NzBiNjQ5ZDM5ZDgyZDU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyOGJjODRiNWI1YTRkMjQ4OWIzNGM4Yjk3MjU0ZWQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE5MTkzMTA3OTI2NzYsLTc0LjA5NjI5MDI5MjM1NDU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzNjFlMDg1NjkwMjRkMTdiZjQ3YzE4NDUyMjNjMzhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxYTY0MjU5NWIxNTQ0ZDdiN2Y0MzBiMTQ5NTkxMTczID0gJCgnPGRpdiBpZD0iaHRtbF84MWE2NDI1OTViMTU0NGQ3YjdmNDMwYjE0OTU5MTE3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2lsdmVyIExha2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzNjFlMDg1NjkwMjRkMTdiZjQ3YzE4NDUyMjNjMzhiLnNldENvbnRlbnQoaHRtbF84MWE2NDI1OTViMTU0NGQ3YjdmNDMwYjE0OTU5MTE3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMjhiYzg0YjViNWE0ZDI0ODliMzRjOGI5NzI1NGVkMy5iaW5kUG9wdXAocG9wdXBfMjM2MWUwODU2OTAyNGQxN2JmNDdjMTg0NTIyM2MzOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjBhZWNmYjZlYTI1NDM2ZWFkNmEwYzRiOGIxMThmYWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTI3NjAxNTc1NjQ4OSwtNzQuMDk3MTI1NTIxNzg1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZjFmOTJlODZiNDA0MmFkYTI5MGMxMGMwYmQzNWM1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNDkyZTBmYjA0NmU0MzY0ODM1ZjUxNzQyMzliMWIyMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzQ5MmUwZmIwNDZlNDM2NDgzNWY1MTc0MjM5YjFiMjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1bm55c2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2YxZjkyZTg2YjQwNDJhZGEyOTBjMTBjMGJkMzVjNWMuc2V0Q29udGVudChodG1sX2M0OTJlMGZiMDQ2ZTQzNjQ4MzVmNTE3NDIzOWIxYjIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYwYWVjZmI2ZWEyNTQzNmVhZDZhMGM0YjhiMTE4ZmFiLmJpbmRQb3B1cChwb3B1cF9jZjFmOTJlODZiNDA0MmFkYTI5MGMxMGMwYmQzNWM1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYjhiNDI5Y2I3Y2M0MGUxYjJhMDRlNjU0MThmMjk0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY0MzY3NTE4MzM0MDk3NCwtNzMuOTYxMDEzMTI0NjY3NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQxMGM5ZmFlYjYzNGMyOGJkZjUxNzg0YTY4MzI2NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjM5Y2Y5MGUzZmE4NGEwNzllYzUxNDAxNzA0ODI1N2EgPSAkKCc8ZGl2IGlkPSJodG1sX2YzOWNmOTBlM2ZhODRhMDc5ZWM1MTQwMTcwNDgyNTdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EaXRtYXMgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQxMGM5ZmFlYjYzNGMyOGJkZjUxNzg0YTY4MzI2Nzcuc2V0Q29udGVudChodG1sX2YzOWNmOTBlM2ZhODRhMDc5ZWM1MTQwMTcwNDgyNTdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNiOGI0MjljYjdjYzQwZTFiMmEwNGU2NTQxOGYyOTRkLmJpbmRQb3B1cChwb3B1cF81NDEwYzlmYWViNjM0YzI4YmRmNTE3ODRhNjgzMjY3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTk1NjNiOTUzZmQ0OGRmYjUxYjk5YzhlYzA2YTdhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2MDk0NjU2MTg4MTExLC03My45MzcxODY4MDU1OTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Y2YzMTM3NTU3MzQ0M2Y5YWVkNDBjYmMwYzZiMmZkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZjQwZmFhYWQ4OGQ0YWVjYTI1ZGM1OGI0ZDdmYTMzOCA9ICQoJzxkaXYgaWQ9Imh0bWxfYmY0MGZhYWFkODhkNGFlY2EyNWRjNThiNGQ3ZmEzMzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbmdhdGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjZjMxMzc1NTczNDQzZjlhZWQ0MGNiYzBjNmIyZmQ4LnNldENvbnRlbnQoaHRtbF9iZjQwZmFhYWQ4OGQ0YWVjYTI1ZGM1OGI0ZDdmYTMzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTk1NjNiOTUzZmQ0OGRmYjUxYjk5YzhlYzA2YTdhZi5iaW5kUG9wdXAocG9wdXBfNmNmMzEzNzU1NzM0NDNmOWFlZDQwY2JjMGM2YjJmZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDUxMjhhNjY0MThlNGVkOTk1ZjMxNzY1YmJiMGFlY2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTU1NzIzMTMyODA3NjQsLTczLjkyNjg4MjEyNjE2OTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZlODU5MjM4MGI0YTQ1NzM4YTQwMzBjOTc4NDg1MDgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1Mzc0ZTdhN2FkODQyNTJiYjNhOTdlNTUzYTU4MjhhID0gJCgnPGRpdiBpZD0iaHRtbF8xNTM3NGU3YTdhZDg0MjUyYmIzYTk3ZTU1M2E1ODI4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UnVnYnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZlODU5MjM4MGI0YTQ1NzM4YTQwMzBjOTc4NDg1MDgyLnNldENvbnRlbnQoaHRtbF8xNTM3NGU3YTdhZDg0MjUyYmIzYTk3ZTU1M2E1ODI4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNTEyOGE2NjQxOGU0ZWQ5OTVmMzE3NjViYmIwYWVjYi5iaW5kUG9wdXAocG9wdXBfZmU4NTkyMzgwYjRhNDU3MzhhNDAzMGM5Nzg0ODUwODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzQyODdlYjEwZmEzNDdiNDlmNmI1NTgwNDAxY2U3NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MDkxOTA0NDQzNDU1OCwtNzQuMDgwMTU3MzQ5MzYyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA0NDg3YTRjNmRmNDdhNjlhZjM5ZmU5OTk0ZjU4OGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjYwY2U1NTdiNDQ4NDBjNDhhOWFlYWZjYTkyNGIxMzIgPSAkKCc8ZGl2IGlkPSJodG1sX2I2MGNlNTU3YjQ0ODQwYzQ4YTlhZWFmY2E5MjRiMTMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwNDQ4N2E0YzZkZjQ3YTY5YWYzOWZlOTk5NGY1ODhlLnNldENvbnRlbnQoaHRtbF9iNjBjZTU1N2I0NDg0MGM0OGE5YWVhZmNhOTI0YjEzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNDI4N2ViMTBmYTM0N2I0OWY2YjU1ODA0MDFjZTc0Yy5iaW5kUG9wdXAocG9wdXBfMzA0NDg3YTRjNmRmNDdhNjlhZjM5ZmU5OTk0ZjU4OGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTNiM2JkZDMyMDc4NGE3OGJiNmE2YzA2M2I5Y2E5MmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjEwOTA0NzI3NTQwOSwtNzQuMTMzMDQxNDM5NTE3MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjUyNDU2NzIwZjdiNDc4NjlkNGJjNmZlM2Y1OWZmYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjllNzNiZTYxNjMzNGY0MDgxY2U2ZTFlMDUyYzBiOGYgPSAkKCc8ZGl2IGlkPSJodG1sX2I5ZTczYmU2MTYzMzRmNDA4MWNlNmUxZTA1MmMwYjhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0ZXJsZWlnaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjUyNDU2NzIwZjdiNDc4NjlkNGJjNmZlM2Y1OWZmYmEuc2V0Q29udGVudChodG1sX2I5ZTczYmU2MTYzMzRmNDA4MWNlNmUxZTA1MmMwYjhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzYjNiZGQzMjA3ODRhNzhiYjZhNmMwNjNiOWNhOTJiLmJpbmRQb3B1cChwb3B1cF82NTI0NTY3MjBmN2I0Nzg2OWQ0YmM2ZmUzZjU5ZmZiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYmI5ODI5OTE1ZTI0ODJkYjgzNWM2N2RlYmEyM2YwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYyMDE3MTUxMjIzMTg4NCwtNzQuMTUzMTUyNDYzODc3NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTVjZmZkYzEzOGU5NDk5NjhlZTk1MmNiY2JlMGRjMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODIyOGY0MGM1NjE2NGI0OTkyMDc0ZGU1NWQzYmM3N2IgPSAkKCc8ZGl2IGlkPSJodG1sXzgyMjhmNDBjNTYxNjRiNDk5MjA3NGRlNTVkM2JjNzdiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFuaXRldmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1Y2ZmZGMxMzhlOTQ5OTY4ZWU5NTJjYmNiZTBkYzM2LnNldENvbnRlbnQoaHRtbF84MjI4ZjQwYzU2MTY0YjQ5OTIwNzRkZTU1ZDNiYzc3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYmI5ODI5OTE1ZTI0ODJkYjgzNWM2N2RlYmEyM2YwZi5iaW5kUG9wdXAocG9wdXBfOTVjZmZkYzEzOGU5NDk5NjhlZTk1MmNiY2JlMGRjMzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTViNzU3NjFkNWY0NGViNWFmODU5MGVkMzFmOGI1MWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzUzMjUwOTkxMTQ5MiwtNzQuMTY1MTA0MjAyNDExMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzZlZjE1NDhjYTdjNDY4OTk2NTFkZWU4OWRlMTY0NWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWYyZWJiZjk2MDUxNGJlNGJmYzBjZWM1ZWY3NGIxZjcgPSAkKCc8ZGl2IGlkPSJodG1sXzlmMmViYmY5NjA1MTRiZTRiZmMwY2VjNWVmNzRiMWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Bcmxpbmd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2ZWYxNTQ4Y2E3YzQ2ODk5NjUxZGVlODlkZTE2NDVlLnNldENvbnRlbnQoaHRtbF85ZjJlYmJmOTYwNTE0YmU0YmZjMGNlYzVlZjc0YjFmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNWI3NTc2MWQ1ZjQ0ZWI1YWY4NTkwZWQzMWY4YjUxYy5iaW5kUG9wdXAocG9wdXBfNzZlZjE1NDhjYTdjNDY4OTk2NTFkZWU4OWRlMTY0NWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmMyNWVlM2Y1ZmIwNGQzOThhZTk0NGM3MTk4MDM1YzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTYzMTI1NzEyNzY3MzQsLTc0LjA2NzEyMzYzMjI1NTc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjZDA3YjVmNDk3YjRiNzRhNmJlOTczMzcyZmZlYmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlNGRjZGI5ZTFmMzQ5YWFiNmJiZDUzYjk2ZjcxYjZjID0gJCgnPGRpdiBpZD0iaHRtbF9kZTRkY2RiOWUxZjM0OWFhYjZiYmQ1M2I5NmY3MWI2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyb2NoYXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZDA3YjVmNDk3YjRiNzRhNmJlOTczMzcyZmZlYmQyLnNldENvbnRlbnQoaHRtbF9kZTRkY2RiOWUxZjM0OWFhYjZiYmQ1M2I5NmY3MWI2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzI1ZWUzZjVmYjA0ZDM5OGFlOTQ0YzcxOTgwMzVjOC5iaW5kUG9wdXAocG9wdXBfOGNkMDdiNWY0OTdiNGI3NGE2YmU5NzMzNzJmZmViZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDYwOTBlY2E3MGFmNDQyYTgxY2VhOWMyZWFiOGJkYzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTgyNjgzNTk1OTk5MSwtNzQuMDc2Njc0MzYyNzkwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ODI2MTUzNmE5YTU0NjBhODBlMzc0ODg1NGU3MDRhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWUxNjcyMTVkMzU0NWM3OTA1OGNjZjZlOTUwYzg3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfNmFlMTY3MjE1ZDM1NDVjNzkwNThjY2Y2ZTk1MGM4NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYXNtZXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODI2MTUzNmE5YTU0NjBhODBlMzc0ODg1NGU3MDRhMy5zZXRDb250ZW50KGh0bWxfNmFlMTY3MjE1ZDM1NDVjNzkwNThjY2Y2ZTk1MGM4NzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDYwOTBlY2E3MGFmNDQyYTgxY2VhOWMyZWFiOGJkYzQuYmluZFBvcHVwKHBvcHVwXzg4MjYxNTM2YTlhNTQ2MGE4MGUzNzQ4ODU0ZTcwNGEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlZjYzYzgxZGQ4MDQ1YjBiN2RmMWVhZjE5MmIxNWM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTk2MzI4OTEzNzk1MTMsLTc0LjA4NzUxMTE4MDA1NTc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhMjQ1M2MxYzQ3NTRmZDBhMGFkOWE4YmNjM2JjMTQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2ZGEwZDg2NzQyZDQxNGZiNjE0ODM5NDUzZTdkMTkyID0gJCgnPGRpdiBpZD0iaHRtbF8wNmRhMGQ4Njc0MmQ0MTRmYjYxNDgzOTQ1M2U3ZDE5MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2xkIFRvd248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhMjQ1M2MxYzQ3NTRmZDBhMGFkOWE4YmNjM2JjMTQzLnNldENvbnRlbnQoaHRtbF8wNmRhMGQ4Njc0MmQ0MTRmYjYxNDgzOTQ1M2U3ZDE5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZWY2M2M4MWRkODA0NWIwYjdkZjFlYWYxOTJiMTVjNy5iaW5kUG9wdXAocG9wdXBfYWEyNDUzYzFjNDc1NGZkMGEwYWQ5YThiY2MzYmMxNDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjhkYWQyMmEwMGVmNDE0OTkyZTNiZjZlMTYyNTQ5YTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODg2NzI5NDgxOTkyNzUsLTc0LjA5NjM5OTA1MzEyNTIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzNzYyNTc1ODljYjQ3ZTNhZTg4ZTY3NjVkYWM0NDJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmNDRiMWI2ZTg4YzRiNjFhZjEzY2U1M2JhNTlkZTg3ID0gJCgnPGRpdiBpZD0iaHRtbF83ZjQ0YjFiNmU4OGM0YjYxYWYxM2NlNTNiYTU5ZGU4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RG9uZ2FuIEhpbGxzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Mzc2MjU3NTg5Y2I0N2UzYWU4OGU2NzY1ZGFjNDQyYi5zZXRDb250ZW50KGh0bWxfN2Y0NGIxYjZlODhjNGI2MWFmMTNjZTUzYmE1OWRlODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhkYWQyMmEwMGVmNDE0OTkyZTNiZjZlMTYyNTQ5YTQuYmluZFBvcHVwKHBvcHVwXzQzNzYyNTc1ODljYjQ3ZTNhZTg4ZTY3NjVkYWM0NDJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwMmZiMzBmOTI4MjRhZDBiYmY2N2Y4YzE1YzA2YWFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTczNTI2OTA1NzQyODMsLTc0LjA5MzQ4MjY2MzAzNTkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1NThiMTdiYjI5NjRiNTM5NWYzOGQyMDUyZjJhMThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1ZTgyMjNhODc0MjQ5NmY5YTNhNmQ5YzBmZDZiNzQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9jNWU4MjIzYTg3NDI0OTZmOWEzYTZkOWMwZmQ2Yjc0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlkbGFuZCBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTU1OGIxN2JiMjk2NGI1Mzk1ZjM4ZDIwNTJmMmExOGMuc2V0Q29udGVudChodG1sX2M1ZTgyMjNhODc0MjQ5NmY5YTNhNmQ5YzBmZDZiNzQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwMmZiMzBmOTI4MjRhZDBiYmY2N2Y4YzE1YzA2YWFjLmJpbmRQb3B1cChwb3B1cF81NTU4YjE3YmIyOTY0YjUzOTVmMzhkMjA1MmYyYTE4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZDdhYzAyZmQ2ZDc0MWNjYWU3NjA3ZmU1NDE5YTJkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NjIxNTU4NzExNzg4LC03NC4xMDU4NTU5ODU0NTQzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2Y1NWVmZDBhZjg0NTk2YTk0ZjY0N2Q4YzI3M2Q0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MTYxMmUxY2IzOWY0NGMzYmViZjYzMzhlMTc3NTdiMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTE2MTJlMWNiMzlmNDRjM2JlYmY2MzM4ZTE3NzU3YjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW50IENpdHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3ZjU1ZWZkMGFmODQ1OTZhOTRmNjQ3ZDhjMjczZDQ5LnNldENvbnRlbnQoaHRtbF85MTYxMmUxY2IzOWY0NGMzYmViZjYzMzhlMTc3NTdiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZDdhYzAyZmQ2ZDc0MWNjYWU3NjA3ZmU1NDE5YTJkZi5iaW5kUG9wdXAocG9wdXBfYjdmNTVlZmQwYWY4NDU5NmE5NGY2NDdkOGMyNzNkNDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzFjZGJmNzhjYjhjNDJjYmJjN2I2YjU2ZWY1MWUxZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NjQyNTU0OTMwNzMzNSwtNzQuMTA0MzI3MDc0NjkxMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmIwNjMwNmI1Mjk1NGFjOWI3MjY0NTQ0ZWY2YzQwZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2RjZGQ5Mzg5YmU5NGIwODg2MTdhN2U5MDRlYzYzMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzNkY2RkOTM4OWJlOTRiMDg4NjE3YTdlOTA0ZWM2MzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXcgRG9ycCBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmIwNjMwNmI1Mjk1NGFjOWI3MjY0NTQ0ZWY2YzQwZDkuc2V0Q29udGVudChodG1sXzNkY2RkOTM4OWJlOTRiMDg4NjE3YTdlOTA0ZWM2MzAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcxY2RiZjc4Y2I4YzQyY2JiYzdiNmI1NmVmNTFlMWQzLmJpbmRQb3B1cChwb3B1cF8yYjA2MzA2YjUyOTU0YWM5YjcyNjQ1NDRlZjZjNDBkOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOWNhMzcyZTg2MWU0ZGE0YTUxOTA0ZTg4N2Q1NGFkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU1Mzk4ODAwODU4NDYyLC03NC4xMzkxNjYyMjE3NTc2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNWQ4ZDUyZWUwNTc0NDYyYTdkNmM4ZWY3YTU0MGNlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjkzNmE3MzZmODk0NTQxYTNjN2JjMzg0NTQ0ZjNjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I5MzZhNzM2Zjg5NDU0MWEzYzdiYzM4NDU0NGYzYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheSBUZXJyYWNlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNWQ4ZDUyZWUwNTc0NDYyYTdkNmM4ZWY3YTU0MGNlMy5zZXRDb250ZW50KGh0bWxfY2I5MzZhNzM2Zjg5NDU0MWEzYzdiYzM4NDU0NGYzYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzljYTM3MmU4NjFlNGRhNGE1MTkwNGU4ODdkNTRhZGQuYmluZFBvcHVwKHBvcHVwXzI1ZDhkNTJlZTA1NzQ0NjJhN2Q2YzhlZjdhNTQwY2UzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzNDMwOTMwYzdlMjQ1Y2U4OTUwMTk1MmZiYWNmNWEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTMxOTExOTIwNDg5NjA1LC03NC4xOTE3NDEwNTc0NzgxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzM3M2YyODczZmM0NTMxODhhMWEwNmI3N2M3ZGM4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMTQzNjU0YzFiMDY0NjVjOGViODYwY2FjYjVlYzEzMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjE0MzY1NGMxYjA2NDY1YzhlYjg2MGNhY2I1ZWMxMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1Z3Vlbm90PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNzM3M2YyODczZmM0NTMxODhhMWEwNmI3N2M3ZGM4ZS5zZXRDb250ZW50KGh0bWxfYjE0MzY1NGMxYjA2NDY1YzhlYjg2MGNhY2I1ZWMxMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDM0MzA5MzBjN2UyNDVjZTg5NTAxOTUyZmJhY2Y1YTIuYmluZFBvcHVwKHBvcHVwX2Q3MzczZjI4NzNmYzQ1MzE4OGExYTA2Yjc3YzdkYzhlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzYTIxNjEwMjFiODRkYmNhNTliMmRmNmExNTZiMDYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTI0Njk5Mzc2MTE4MTM2LC03NC4yMTk4MzEwNjYxNjc3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmEyMWFkNGFhZjY0MDAxOWExZjk0MWM1MTNlZjA0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMzliNDQxZmMyNWQ0ZmMyOTI2YWQyYzA5OWI0MDQ1MyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjM5YjQ0MWZjMjVkNGZjMjkyNmFkMmMwOTliNDA0NTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBsZWFzYW50IFBsYWluczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2JhMjFhZDRhYWY2NDAwMTlhMWY5NDFjNTEzZWYwNGMuc2V0Q29udGVudChodG1sX2YzOWI0NDFmYzI1ZDRmYzI5MjZhZDJjMDk5YjQwNDUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEzYTIxNjEwMjFiODRkYmNhNTliMmRmNmExNTZiMDYxLmJpbmRQb3B1cChwb3B1cF9jYmEyMWFkNGFhZjY0MDAxOWExZjk0MWM1MTNlZjA0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYTg5M2FiYTRmZWI0OTBjYTk2ZGQzZDNlNzA4ZDA0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUwNjA4MTY1MzQ2MzA1LC03NC4yMjk1MDM1MDI2MDAyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MmM0NGY4YjY4YWI0YmNjYWM4ZTM3ODhjM2UxY2ExYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODRiNDIyOTVjNjk0M2JmOWExZmViYzMyZTBmZDg5NCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzg0YjQyMjk1YzY5NDNiZjlhMWZlYmMzMmUwZmQ4OTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1dGxlciBNYW5vcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODJjNDRmOGI2OGFiNGJjY2FjOGUzNzg4YzNlMWNhMWMuc2V0Q29udGVudChodG1sX2M4NGI0MjI5NWM2OTQzYmY5YTFmZWJjMzJlMGZkODk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhODkzYWJhNGZlYjQ5MGNhOTZkZDNkM2U3MDhkMDRkLmJpbmRQb3B1cChwb3B1cF84MmM0NGY4YjY4YWI0YmNjYWM4ZTM3ODhjM2UxY2ExYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGFlZmRjMTI3ZjA0ZDc0OGQwNmIxOTZhOTVkZmYwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUzMDUzMTQ4MjgzMzE0LC03NC4yMzIxNTc3NTg5NjUyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzIxMzRjOWNkMGI0Mjg5YTM0YjE4MTRiMzBkNzMyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZmE0Yjc1OTk5ZTc0MTU5YmRiNTUzN2UzMWFkNjcxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2ZhNGI3NTk5OWU3NDE1OWJkYjU1MzdlMzFhZDY3MWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoYXJsZXN0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzMjEzNGM5Y2QwYjQyODlhMzRiMTgxNGIzMGQ3MzIyLnNldENvbnRlbnQoaHRtbF9jZmE0Yjc1OTk5ZTc0MTU5YmRiNTUzN2UzMWFkNjcxZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMGFlZmRjMTI3ZjA0ZDc0OGQwNmIxOTZhOTVkZmYwNC5iaW5kUG9wdXAocG9wdXBfZDMyMTM0YzljZDBiNDI4OWEzNGIxODE0YjMwZDczMjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzY4MzM0MDEyN2Q3NDcwYWFhNDFkMWZjZWFjM2EyNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDk0MDQwMDY1MDA3MiwtNzQuMjE1NzI4NTExMTM5NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2ViNmVkNGIwNTRlNGUzM2E0ZmY0ZGEwOWY1MzJiYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWMxNzI2YTg0YjI0NDQ1ZmE2OWQ4YWIzMDY1N2U4ODUgPSAkKCc8ZGl2IGlkPSJodG1sXzljMTcyNmE4NGIyNDQ0NWZhNjlkOGFiMzA2NTdlODg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb3NzdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlYjZlZDRiMDU0ZTRlMzNhNGZmNGRhMDlmNTMyYmJhLnNldENvbnRlbnQoaHRtbF85YzE3MjZhODRiMjQ0NDVmYTY5ZDhhYjMwNjU3ZTg4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNjgzMzQwMTI3ZDc0NzBhYWE0MWQxZmNlYWMzYTI0ZS5iaW5kUG9wdXAocG9wdXBfN2ViNmVkNGIwNTRlNGUzM2E0ZmY0ZGEwOWY1MzJiYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTMwOTA3ZWFhZmEyNDA0MjhlN2U5ZDFmNzZjOTg4OTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDkyODU4MjI3ODMyMSwtNzQuMTg1ODg2NzQ1ODM4OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdlODg3YWY3ZmNkNDJmNmIyZTkwMGNkYzZiNzVmMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE0MjFkY2ZiYTNlNDZmMTg4OGM4YmQ4YjgwZjI2ZDcgPSAkKCc8ZGl2IGlkPSJodG1sXzhhNDIxZGNmYmEzZTQ2ZjE4ODhjOGJkOGI4MGYyNmQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BcmRlbiBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2U4ODdhZjdmY2Q0MmY2YjJlOTAwY2RjNmI3NWYxMS5zZXRDb250ZW50KGh0bWxfOGE0MjFkY2ZiYTNlNDZmMTg4OGM4YmQ4YjgwZjI2ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTMwOTA3ZWFhZmEyNDA0MjhlN2U5ZDFmNzZjOTg4OTYuYmluZFBvcHVwKHBvcHVwX2Y3ZTg4N2FmN2ZjZDQyZjZiMmU5MDBjZGM2Yjc1ZjExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiOGQ1ZDkzNGQ0ZDQ2ZTI4NjQ2Y2MyYzY5NzM5MmY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTU1Mjk1MjM2MTczMTk0LC03NC4xNzA3OTQxNDc4NjA5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOThkYTZkYWE4ODk0MDM1ODI2M2RhZDQxYjAxNjIyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzYwNzRhYzlkMWY0NjFlODk5Mjg2OGZhYTIzNjdjZSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2M2MDc0YWM5ZDFmNDYxZTg5OTI4NjhmYWEyMzY3Y2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVucmlkZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5OGRhNmRhYTg4OTQwMzU4MjYzZGFkNDFiMDE2MjIxLnNldENvbnRlbnQoaHRtbF83YzYwNzRhYzlkMWY0NjFlODk5Mjg2OGZhYTIzNjdjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYjhkNWQ5MzRkNGQ0NmUyODY0NmNjMmM2OTczOTJmNC5iaW5kUG9wdXAocG9wdXBfZDk4ZGE2ZGFhODg5NDAzNTgyNjNkYWQ0MWIwMTYyMjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGEwNzUxMmM4NTc0NDFiZjg1MmE5YThjYmYxNTJmMmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODkxMzg5NDg3NTI4MSwtNzQuMTU5MDIyMDgxNTY2MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzg2MTU0NWUxNzk2NDg0NGI4YTliN2U1ZTliYWZjNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2U4ZjdmMTkxZmI4NGRjMThkOTUyNWNlYzc4YzA2MTkgPSAkKCc8ZGl2IGlkPSJodG1sXzNlOGY3ZjE5MWZiODRkYzE4ZDk1MjVjZWM3OGMwNjE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZWFydGxhbmQgVmlsbGFnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzg2MTU0NWUxNzk2NDg0NGI4YTliN2U1ZTliYWZjNjkuc2V0Q29udGVudChodG1sXzNlOGY3ZjE5MWZiODRkYzE4ZDk1MjVjZWM3OGMwNjE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhMDc1MTJjODU3NDQxYmY4NTJhOWE4Y2JmMTUyZjJmLmJpbmRQb3B1cChwb3B1cF83ODYxNTQ1ZTE3OTY0ODQ0YjhhOWI3ZTVlOWJhZmM2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDVjZTZkN2ZmZTI0Mjc4OWYwMDMzNTYyNjYwY2MzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5NDcyNjAyNzQ2Mjk1LC03NC4xODk1NjA0NTUxOTY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2ZWU0NDA3OGJhYjRmNDY5NzVkZmMwMjRjMDQwZjk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkZTdjYTc4MTFmZDRiMzBhNDgwZjQ2YWM2ODljZTU4ID0gJCgnPGRpdiBpZD0iaHRtbF85ZGU3Y2E3ODExZmQ0YjMwYTQ4MGY0NmFjNjg5Y2U1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hlbHNlYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjZlZTQ0MDc4YmFiNGY0Njk3NWRmYzAyNGMwNDBmOTQuc2V0Q29udGVudChodG1sXzlkZTdjYTc4MTFmZDRiMzBhNDgwZjQ2YWM2ODljZTU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkNWNlNmQ3ZmZlMjQyNzg5ZjAwMzM1NjI2NjBjYzNmLmJpbmRQb3B1cChwb3B1cF8yNmVlNDQwNzhiYWI0ZjQ2OTc1ZGZjMDI0YzA0MGY5NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMmQxNDM4YmViYTk0OGQ0ODcwOWJmYWQyMzRkMGIyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwNTc3ODY4NDUyMzU4LC03NC4xODcyNTYzODM4MTU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hM2QwYzJhM2ViZjI0NTVjOTcyOWFlNmExNWFhODdiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTRlMDJjN2JjNWQ0NzM2OTYzMmRhZTc5MzJkYTVjYSA9ICQoJzxkaXYgaWQ9Imh0bWxfODk0ZTAyYzdiYzVkNDczNjk2MzJkYWU3OTMyZGE1Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJsb29tZmllbGQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzZDBjMmEzZWJmMjQ1NWM5NzI5YWU2YTE1YWE4N2IyLnNldENvbnRlbnQoaHRtbF84OTRlMDJjN2JjNWQ0NzM2OTYzMmRhZTc5MzJkYTVjYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMmQxNDM4YmViYTk0OGQ0ODcwOWJmYWQyMzRkMGIyNy5iaW5kUG9wdXAocG9wdXBfYTNkMGMyYTNlYmYyNDU1Yzk3MjlhZTZhMTVhYTg3YjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNlOWU3M2Y3ZGVmNGM0OWE2N2UxY2FhNjM5NWNjNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MDk1OTE4MDA0MjAzLC03NC4xNTk0MDk0ODY1NzEyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNGQ4MjViY2Q2OWQ0ZjA2ODkxNmZkYTEwYzQ0MGIzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOGFmNDZlOGExNGU0NzM1YmI0YTQ0OTQzYTllOWEzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjhhZjQ2ZThhMTRlNDczNWJiNGE0NDk0M2E5ZTlhMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1bGxzIEhlYWQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0ZDgyNWJjZDY5ZDRmMDY4OTE2ZmRhMTBjNDQwYjM0LnNldENvbnRlbnQoaHRtbF8yOGFmNDZlOGExNGU0NzM1YmI0YTQ0OTQzYTllOWEzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80M2U5ZTczZjdkZWY0YzQ5YTY3ZTFjYWE2Mzk1Y2M3MC5iaW5kUG9wdXAocG9wdXBfZDRkODI1YmNkNjlkNGYwNjg5MTZmZGExMGM0NDBiMzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVkNmY5ZThhYTVlNDM0OGI5MzNkNTkyZWU4YjYxM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODI2ODI1NjcxMjU3LC03My45NTMyNTY0NjgzNzExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTcxZTM3MGNkMDY0YzkyOWQ2NjhiNjc4MDM1NWM3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDBjMTUzY2VmM2U0ZjZhOGFiMzgyNmJjMTUyNmUzYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDQwYzE1M2NlZjNlNGY2YThhYjM4MjZiYzE1MjZlM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcm5lZ2llIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlNzFlMzcwY2QwNjRjOTI5ZDY2OGI2NzgwMzU1Yzc3LnNldENvbnRlbnQoaHRtbF9kNDBjMTUzY2VmM2U0ZjZhOGFiMzgyNmJjMTUyNmUzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWQ2ZjllOGFhNWU0MzQ4YjkzM2Q1OTJlZThiNjEzZC5iaW5kUG9wdXAocG9wdXBfY2U3MWUzNzBjZDA2NGM5MjlkNjY4YjY3ODAzNTVjNzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGU2ZDQ5MDQ1ZmI5NGRhOWIwZmU3OTE0NGRlMWE5NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjMyNTkwMTg4NTc2OCwtNzMuOTg4NDMzNjgwMjM1OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjFkNWVjMjUzOTljNDBlZGEyM2JlODFkMWIzMTQwMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Y4MGVlZWMzNWU5NGFiNWJmODdmMTYwNGI3MGIyZDMgPSAkKCc8ZGl2IGlkPSJodG1sXzdmODBlZWVjMzVlOTRhYjViZjg3ZjE2MDRiNzBiMmQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob2hvPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMWQ1ZWMyNTM5OWM0MGVkYTIzYmU4MWQxYjMxNDAxNS5zZXRDb250ZW50KGh0bWxfN2Y4MGVlZWMzNWU5NGFiNWJmODdmMTYwNGI3MGIyZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGU2ZDQ5MDQ1ZmI5NGRhOWIwZmU3OTE0NGRlMWE5NGMuYmluZFBvcHVwKHBvcHVwX2YxZDVlYzI1Mzk5YzQwZWRhMjNiZTgxZDFiMzE0MDE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3M2VmNmE4OWM2YjRhYWNiOGQzNjc3NWU3MDkwNDg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE1MjI4OTIwNDYyODIsLTc0LjAwNTQxNTI5ODczMzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4YzBlMzdhNTRhOTRlM2Y5MjliMjA3MGVhNTE1MTU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyODc4ZjlmYWE0MDRlYjA5NmZmZmVkYzg3YTY5OWZkID0gJCgnPGRpdiBpZD0iaHRtbF8yMjg3OGY5ZmFhNDA0ZWIwOTZmZmZlZGM4N2E2OTlmZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2l2aWMgQ2VudGVyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OGMwZTM3YTU0YTk0ZTNmOTI5YjIwNzBlYTUxNTE1Ny5zZXRDb250ZW50KGh0bWxfMjI4NzhmOWZhYTQwNGViMDk2ZmZmZWRjODdhNjk5ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjczZWY2YTg5YzZiNGFhY2I4ZDM2Nzc1ZTcwOTA0ODkuYmluZFBvcHVwKHBvcHVwXzc4YzBlMzdhNTRhOTRlM2Y5MjliMjA3MGVhNTE1MTU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4MTIzOGZkMmE0OTRlNmU4YWFlNGQ2NzM2NDQ3YzdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NTA5NjY0MzEyMiwtNzMuOTg4NzEzMTMyODUyNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmUxZWQ3MTc5MTYwNGI4YTkyYTE3NGRkMDY5ZTIzYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTU4ZTM1MzgzMjQ2NDMxNzliMDcyODBkM2NhZTFkMWQgPSAkKCc8ZGl2IGlkPSJodG1sX2E1OGUzNTM4MzI0NjQzMTc5YjA3MjgwZDNjYWUxZDFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWR0b3duIFNvdXRoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTFlZDcxNzkxNjA0YjhhOTJhMTc0ZGQwNjllMjNiOC5zZXRDb250ZW50KGh0bWxfYTU4ZTM1MzgzMjQ2NDMxNzliMDcyODBkM2NhZTFkMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTgxMjM4ZmQyYTQ5NGU2ZThhYWU0ZDY3MzY0NDdjN2EuYmluZFBvcHVwKHBvcHVwX2ZlMWVkNzE3OTE2MDRiOGE5MmExNzRkZDA2OWUyM2I4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4NzBmYjBkNGU3ZTQ3MzM5MGVlZmUxMmFiNzkxZGRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTY5NjA1OTQyNzU1MDUsLTc0LjEzNDA1NzI5ODYyNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmUxOWQ4MDUwYTJiNDNiZjkyYTVlOWI4NGFiNTNlYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjJlYzQzNDY0MGM4NDI0M2E5MGMxNmYzNWU4YjU2ZDggPSAkKCc8ZGl2IGlkPSJodG1sX2YyZWM0MzQ2NDBjODQyNDNhOTBjMTZmMzVlOGI1NmQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaWNobW9uZCBUb3duPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTE5ZDgwNTBhMmI0M2JmOTJhNWU5Yjg0YWI1M2VhOC5zZXRDb250ZW50KGh0bWxfZjJlYzQzNDY0MGM4NDI0M2E5MGMxNmYzNWU4YjU2ZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTg3MGZiMGQ0ZTdlNDczMzkwZWVmZTEyYWI3OTFkZGEuYmluZFBvcHVwKHBvcHVwXzZlMTlkODA1MGEyYjQzYmY5MmE1ZTliODRhYjUzZWE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmOTZlMTU5ZTIyMDRhMmQ5Zjg2NmEwMzU3NzZmM2ZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjA5NzE5MzQwNzkyODQsLTc0LjA2NjY3NzY2MDYxNzcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkOWYwYWRlZTcxMjQ0MGQ5MzUyN2JiYTI3MjY5YTFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4YzAwNzFlY2M2YTRlMDI5YjkwOThjZmY4NTQxNzRkID0gJCgnPGRpdiBpZD0iaHRtbF82OGMwMDcxZWNjNmE0ZTAyOWI5MDk4Y2ZmODU0MTc0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2hvcmUgQWNyZXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkOWYwYWRlZTcxMjQ0MGQ5MzUyN2JiYTI3MjY5YTFjLnNldENvbnRlbnQoaHRtbF82OGMwMDcxZWNjNmE0ZTAyOWI5MDk4Y2ZmODU0MTc0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85Zjk2ZTE1OWUyMjA0YTJkOWY4NjZhMDM1Nzc2ZjNmYS5iaW5kUG9wdXAocG9wdXBfMmQ5ZjBhZGVlNzEyNDQwZDkzNTI3YmJhMjcyNjlhMWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVhNTZiOTE0MThhNDBlNmI4OWU5YWY4OGY5YWY2NTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTkxNzg0NTIwMjg0MywtNzQuMDcyNjQyNDQ1NDg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1ZDdiOTU5NTE0YTRjNjg4ODQ3YmYxN2NhZjZlODFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwNjE3YTYwOGNjMjRhMjlhMWVkOWY3NGJjYzI0MTU1ID0gJCgnPGRpdiBpZD0iaHRtbF9jMDYxN2E2MDhjYzI0YTI5YTFlZDlmNzRiY2MyNDE1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpZnRvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVkN2I5NTk1MTRhNGM2ODg4NDdiZjE3Y2FmNmU4MWMuc2V0Q29udGVudChodG1sX2MwNjE3YTYwOGNjMjRhMjlhMWVkOWY3NGJjYzI0MTU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlYTU2YjkxNDE4YTQwZTZiODllOWFmODhmOWFmNjUyLmJpbmRQb3B1cChwb3B1cF9jNWQ3Yjk1OTUxNGE0YzY4ODg0N2JmMTdjYWY2ZTgxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGIyOWU3YjJlYzY0YmM1YjBjOTJhMTYzODRjMmJjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwNDQ3MzE4OTY4NzksLTc0LjA4NDAyMzY0NzQwMzU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjNzRmOTEyMTYwMjQ5NmNhNzMxZTVlNWFmODQzOGRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4Mjg4ZDBhNDE0MTQxM2U5ODJkNDQwMjUzZWIzMjM4ID0gJCgnPGRpdiBpZD0iaHRtbF8yODI4OGQwYTQxNDE0MTNlOTgyZDQ0MDI1M2ViMzIzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uY29yZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWM3NGY5MTIxNjAyNDk2Y2E3MzFlNWU1YWY4NDM4ZGEuc2V0Q29udGVudChodG1sXzI4Mjg4ZDBhNDE0MTQxM2U5ODJkNDQwMjUzZWIzMjM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkYjI5ZTdiMmVjNjRiYzViMGM5MmExNjM4NGMyYmNmLmJpbmRQb3B1cChwb3B1cF81Yzc0ZjkxMjE2MDI0OTZjYTczMWU1ZTVhZjg0MzhkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWY5OTFiOTkxZGI0ZjFiOTJiMzU0MTAwMzIyZmE3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwNjc5NDM5NDgwMSwtNzQuMDk3NzYyMDY5NzI1MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzUwZjZkODMyYmQ2NGJhYjhkYTE3NjdjNGRmN2NhYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDU4MzJmMzNhNWI1NDI1NjgzYzljNTVmNDA4Y2YwZTYgPSAkKCc8ZGl2IGlkPSJodG1sXzQ1ODMyZjMzYTViNTQyNTY4M2M5YzU1ZjQwOGNmMGU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbWVyc29uIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1MGY2ZDgzMmJkNjRiYWI4ZGExNzY3YzRkZjdjYWFlLnNldENvbnRlbnQoaHRtbF80NTgzMmYzM2E1YjU0MjU2ODNjOWM1NWY0MDhjZjBlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOWY5OTFiOTkxZGI0ZjFiOTJiMzU0MTAwMzIyZmE3Mi5iaW5kUG9wdXAocG9wdXBfMzUwZjZkODMyYmQ2NGJhYjhkYTE3NjdjNGRmN2NhYWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTg4MDdkMTM0OTlmNDk0Mzk5YTY4NzkwYzhlZjg2OTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzU2MzAwMDY4MTE1MSwtNzQuMDk4MDUwNjIzNzM4ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmVmOGMzN2ZhNTNkNGNiZGIwYWNmNzgyOGE5MDEwNjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTdhMjIzZjRlNzc4NDEzMjg0NzhiZjA4ODI0YmEyN2IgPSAkKCc8ZGl2IGlkPSJodG1sXzk3YTIyM2Y0ZTc3ODQxMzI4NDc4YmYwODgyNGJhMjdiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW5kYWxsIE1hbm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZWY4YzM3ZmE1M2Q0Y2JkYjBhY2Y3ODI4YTkwMTA2Ny5zZXRDb250ZW50KGh0bWxfOTdhMjIzZjRlNzc4NDEzMjg0NzhiZjA4ODI0YmEyN2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTg4MDdkMTM0OTlmNDk0Mzk5YTY4NzkwYzhlZjg2OTkuYmluZFBvcHVwKHBvcHVwX2ZlZjhjMzdmYTUzZDRjYmRiMGFjZjc4MjhhOTAxMDY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhODBjYmFiNTg3ODRhMTc4NWZmNDI2OTEwY2EyOTc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjM4NDMyODM3OTQ3OTUsLTc0LjE4NjIyMzMxNzQ5ODIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzMWM0NjczZTcyODQ4YTFhYTIxMjk4NDYwZGY1ZTY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3MzRjNzA2MGMxNjRkZDQ5YWU0ZTcyMWJkNmVjYjczID0gJCgnPGRpdiBpZD0iaHRtbF8wNzM0YzcwNjBjMTY0ZGQ0OWFlNGU3MjFiZDZlY2I3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG93bGFuZCBIb29rPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzFjNDY3M2U3Mjg0OGExYWEyMTI5ODQ2MGRmNWU2Ny5zZXRDb250ZW50KGh0bWxfMDczNGM3MDYwYzE2NGRkNDlhZTRlNzIxYmQ2ZWNiNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGE4MGNiYWI1ODc4NGExNzg1ZmY0MjY5MTBjYTI5NzkuYmluZFBvcHVwKHBvcHVwXzAzMWM0NjczZTcyODQ4YTFhYTIxMjk4NDYwZGY1ZTY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U5NWVmZjI2NmU3NzRjYjk4NTE2MGU1MDUxYWViY2QwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMwMTQ2NzQxMTkzODI2LC03NC4xNDE4MTY3ODk2ODg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1YTI0ZjgwZWRkODRhMWY4MDBlODc0YmJkYmNiMWJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NDAyMjYxZTQ3MzRiOTQ4MzUzOTlkNjdiMGNhOTlhID0gJCgnPGRpdiBpZD0iaHRtbF8zODQwMjI2MWU0NzM0Yjk0ODM1Mzk5ZDY3YjBjYTk5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWxtIFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1YTI0ZjgwZWRkODRhMWY4MDBlODc0YmJkYmNiMWJkLnNldENvbnRlbnQoaHRtbF8zODQwMjI2MWU0NzM0Yjk0ODM1Mzk5ZDY3YjBjYTk5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOTVlZmYyNjZlNzc0Y2I5ODUxNjBlNTA1MWFlYmNkMC5iaW5kUG9wdXAocG9wdXBfZTVhMjRmODBlZGQ4NGExZjgwMGU4NzRiYmRiY2IxYmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY1MzUxYmNmMDM0NGI1NDg5ODU2NjE3ZTRjMzlmNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTIxMTc0NTE3OTM0OTQsLTczLjkxNjY1MzMxOTc4MDQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3YTU0YzM5ZDcyMzQ1Zjg5MGJjYzdlMmJmMWU1M2ZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2ODdiNjUxYjczOTRmYjFhNjMzZDM3MmE5NDkyNzFmID0gJCgnPGRpdiBpZD0iaHRtbF8wNjg3YjY1MWI3Mzk0ZmIxYTYzM2QzNzJhOTQ5MjcxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVtc2VuIFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3YTU0YzM5ZDcyMzQ1Zjg5MGJjYzdlMmJmMWU1M2ZlLnNldENvbnRlbnQoaHRtbF8wNjg3YjY1MWI3Mzk0ZmIxYTYzM2QzNzJhOTQ5MjcxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZjUzNTFiY2YwMzQ0YjU0ODk4NTY2MTdlNGMzOWY3My5iaW5kUG9wdXAocG9wdXBfNDdhNTRjMzlkNzIzNDVmODkwYmNjN2UyYmYxZTUzZmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTlmNjdjZjJkNDg2NDJlZjg3NWJmNTMyNGJmZjY0ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjI3NDQyNzk2OTY2LC03My44ODUxMTc3NjM3OTI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZmVlOTQ4YzZkMDE0YWJhYWI2ZmEyYzkxZDA2NWNkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWU1NjVkZWM3NjY0ZGQ3YWU5NTI2NmU5ODczMWJmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWFlNTY1ZGVjNzY2NGRkN2FlOTUyNjZlOTg3MzFiZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBMb3RzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZmVlOTQ4YzZkMDE0YWJhYWI2ZmEyYzkxZDA2NWNkNy5zZXRDb250ZW50KGh0bWxfYWFlNTY1ZGVjNzY2NGRkN2FlOTUyNjZlOTg3MzFiZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTlmNjdjZjJkNDg2NDJlZjg3NWJmNTMyNGJmZjY0ZTguYmluZFBvcHVwKHBvcHVwXzRmZWU5NDhjNmQwMTRhYmFhYjZmYTJjOTFkMDY1Y2Q3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwZDU3Y2Q5YmRhODQwM2E4ZmNmY2UwYjM2MzIzNzQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMxMzE3NTUwMzk2NjcsLTczLjkwMjMzNDc0Mjk1ODM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxNzViMGRiMzQxMDRhMmY4OWZiNDc5ZGNhNWFhNjYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhZjA3MTAzMWIyOTQwMDc5MGJiYTQxMGRkZmRmYTJkID0gJCgnPGRpdiBpZD0iaHRtbF9hYWYwNzEwMzFiMjk0MDA3OTBiYmE0MTBkZGZkZmEyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFlcmRlZ2F0IEJhc2luPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMTc1YjBkYjM0MTA0YTJmODlmYjQ3OWRjYTVhYTY2MC5zZXRDb250ZW50KGh0bWxfYWFmMDcxMDMxYjI5NDAwNzkwYmJhNDEwZGRmZGZhMmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTBkNTdjZDliZGE4NDAzYThmY2ZjZTBiMzYzMjM3NDMuYmluZFBvcHVwKHBvcHVwXzMxNzViMGRiMzQxMDRhMmY4OWZiNDc5ZGNhNWFhNjYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwYTRkMzE1ZmQ4MjRiMWY4ODIwYzE4NTM2YTZjNDM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE1OTc0MjM5NjIzMzYsLTczLjkxNTE1MzkxNTUwNDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1MjU5ZjIxNDY3MTQ2MWZhYWJjNmI5N2QyYjI3YWZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3ZDE2ZmI0YThjYTRmMWJhOGE1YmJhNDlmZjQyYjM1ID0gJCgnPGRpdiBpZD0iaHRtbF9jN2QxNmZiNGE4Y2E0ZjFiYThhNWJiYTQ5ZmY0MmIzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlsbCBCYXNpbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzUyNTlmMjE0NjcxNDYxZmFhYmM2Yjk3ZDJiMjdhZmYuc2V0Q29udGVudChodG1sX2M3ZDE2ZmI0YThjYTRmMWJhOGE1YmJhNDlmZjQyYjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwYTRkMzE1ZmQ4MjRiMWY4ODIwYzE4NTM2YTZjNDM4LmJpbmRQb3B1cChwb3B1cF83NTI1OWYyMTQ2NzE0NjFmYWFiYzZiOTdkMmIyN2FmZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjA0YzQzNTE1YzI0Yjk5OTk2ZTVlY2FjMTkyMmRkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTQ1OTY0MzcwNDgyLC03My43OTY0NjQ2MjA4MTU5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNmI0ODA0N2FlZjI0MmUxOWY4YmZkOWY0YmFhNTM1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWVkMWE2OTM4NzQ0MmY2OTNiYmFmY2I3M2U3ZGFiNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjVlZDFhNjkzODc0NDJmNjkzYmJhZmNiNzNlN2RhYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkphbWFpY2EgSGlsbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2YjQ4MDQ3YWVmMjQyZTE5ZjhiZmQ5ZjRiYWE1MzVkLnNldENvbnRlbnQoaHRtbF9iNWVkMWE2OTM4NzQ0MmY2OTNiYmFmY2I3M2U3ZGFiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjA0YzQzNTE1YzI0Yjk5OTk2ZTVlY2FjMTkyMmRkNC5iaW5kUG9wdXAocG9wdXBfMDZiNDgwNDdhZWYyNDJlMTlmOGJmZDlmNGJhYTUzNWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDdkMTg4ZGY4YjgyNDJjMzg4MTk2NjI2OGMxYWY2NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzM1MDAyNTQyOTc1NywtNzMuNzk2NzE2NzgwMjgzNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZThiNDQ5MGI1MDU5NGEyMjg5YzQ3ZDBjNGZkMTM3NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjgwODAwOTA2OGRiNDgxZjgzYmQ1MzEzNzgyOWUzNmYgPSAkKCc8ZGl2IGlkPSJodG1sXzY4MDgwMDkwNjhkYjQ4MWY4M2JkNTMxMzc4MjllMzZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VdG9waWE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4YjQ0OTBiNTA1OTRhMjI4OWM0N2QwYzRmZDEzNzZhLnNldENvbnRlbnQoaHRtbF82ODA4MDA5MDY4ZGI0ODFmODNiZDUzMTM3ODI5ZTM2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wN2QxODhkZjhiODI0MmMzODgxOTY2MjY4YzFhZjY0Yy5iaW5kUG9wdXAocG9wdXBfZThiNDQ5MGI1MDU5NGEyMjg5YzQ3ZDBjNGZkMTM3NmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODMxODE1OGYxZTczNGUwZDhlNzIyMThhNzg3NDBhMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzQ5MzYxODA3NTQ3OCwtNzMuODA0ODYxMjAwNDA1MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTM2M2EyM2FiNzg0NDk2YWI4YjI4NzI0MmVmNmU1ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGM5NTcyMDhhZTliNDA4MDhkMTEyNDJjZDJmZGIzYmQgPSAkKCc8ZGl2IGlkPSJodG1sXzRjOTU3MjA4YWU5YjQwODA4ZDExMjQyY2QyZmRiM2JkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qb21vbm9rPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzYzYTIzYWI3ODQ0OTZhYjhiMjg3MjQyZWY2ZTVkYy5zZXRDb250ZW50KGh0bWxfNGM5NTcyMDhhZTliNDA4MDhkMTEyNDJjZDJmZGIzYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODMxODE1OGYxZTczNGUwZDhlNzIyMThhNzg3NDBhMzguYmluZFBvcHVwKHBvcHVwX2UzNjNhMjNhYjc4NDQ5NmFiOGIyODcyNDJlZjZlNWRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwZDFmOWI3ZGNhMjQ4YzI5ODAwN2FkNmUyM2M3ZmY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcwMzE3MzkyOTk4MiwtNzMuODk0Njc5OTYyNzA1NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGMzNTg2NDRmNjAyNDg2NmFlZGRkMWZkODc5ZTQyYjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI4MGRiOGMyOWUzNDI0OWI1YzkxZDJhZTg2N2U2NGEgPSAkKCc8ZGl2IGlkPSJodG1sX2YyODBkYjhjMjllMzQyNDliNWM5MWQyYWU4NjdlNjRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Bc3RvcmlhIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjMzU4NjQ0ZjYwMjQ4NjZhZWRkZDFmZDg3OWU0MmIzLnNldENvbnRlbnQoaHRtbF9mMjgwZGI4YzI5ZTM0MjQ5YjVjOTFkMmFlODY3ZTY0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MGQxZjliN2RjYTI0OGMyOTgwMDdhZDZlMjNjN2ZmNS5iaW5kUG9wdXAocG9wdXBfMGMzNTg2NDRmNjAyNDg2NmFlZGRkMWZkODc5ZTQyYjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGVjZTBlNzZlYzMxNDIzZGE5OGI1M2FjNDhiMDJkMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MzE0MjgzNDE2MTU0OCwtNzMuOTAxMTk5MDMzODc2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODdhZjA2OTMzZjk5NGFlMzgwYmI5OTc5ZDI3MjhhYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDY1ZGZlMGU1Yjg5NGY2N2FmMTg4MmM2MzNhZDQ0ZmIgPSAkKCc8ZGl2IGlkPSJodG1sXzA2NWRmZTBlNWI4OTRmNjdhZjE4ODJjNjMzYWQ0NGZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGFyZW1vbnQgVmlsbGFnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODdhZjA2OTMzZjk5NGFlMzgwYmI5OTc5ZDI3MjhhYTUuc2V0Q29udGVudChodG1sXzA2NWRmZTBlNWI4OTRmNjdhZjE4ODJjNjMzYWQ0NGZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlY2UwZTc2ZWMzMTQyM2RhOThiNTNhYzQ4YjAyZDBmLmJpbmRQb3B1cChwb3B1cF84N2FmMDY5MzNmOTk0YWUzODBiYjk5NzlkMjcyOGFhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzAxYzAzMjU5NTQ0NDg1YjcxNzcxNjNjNWQyZDc1ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyNDc4MDQ5MDg0MjkwNSwtNzMuOTE1ODQ2NTI3NTkwMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDU5Njg0NDMxMWZhNDRiYmE0ZDY4ZGU0YTFiYTcxYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzczMTA1YmUyNDM3NDEwZmEyZmUzYTQ2OTVhMGVlYWYgPSAkKCc8ZGl2IGlkPSJodG1sXzM3MzEwNWJlMjQzNzQxMGZhMmZlM2E0Njk1YTBlZWFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25jb3Vyc2UgVmlsbGFnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDU5Njg0NDMxMWZhNDRiYmE0ZDY4ZGU0YTFiYTcxYTYuc2V0Q29udGVudChodG1sXzM3MzEwNWJlMjQzNzQxMGZhMmZlM2E0Njk1YTBlZWFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhjMDFjMDMyNTk1NDQ0ODViNzE3NzE2M2M1ZDJkNzVkLmJpbmRQb3B1cChwb3B1cF80NTk2ODQ0MzExZmE0NGJiYTRkNjhkZTRhMWJhNzFhNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZTM2NzQ4YTc5NWI0MWY4YjYwODdlZWM3YTQxZjk1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0MzgyNjE3NjcxNjU0LC03My45MTY1NTU1MTk2NDQxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjdmOGFmY2VjMDI0OTNhODY1MTUxZGQ3NTIyNzM3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjZhMGFjYTA0YTI0ZjczYWU2NGVmZWUzZTVmZDgyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjI2YTBhY2EwNGEyNGY3M2FlNjRlZmVlM2U1ZmQ4MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdW50IEVkZW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyN2Y4YWZjZWMwMjQ5M2E4NjUxNTFkZDc1MjI3MzczLnNldENvbnRlbnQoaHRtbF9iMjZhMGFjYTA0YTI0ZjczYWU2NGVmZWUzZTVmZDgyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZTM2NzQ4YTc5NWI0MWY4YjYwODdlZWM3YTQxZjk1Mi5iaW5kUG9wdXAocG9wdXBfMDI3ZjhhZmNlYzAyNDkzYTg2NTE1MWRkNzUyMjczNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNmNzVkNDhlZWNmNDU5ZTk0ODQ2ZDliYjQxZDUwZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDg4NDE2MDcyNDY2NSwtNzMuOTA4Mjk5MzA4ODE5ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDYzMjhjMjRiNTFkNDFmNjk0YWEyYjIxNjUxZTMyYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JkZTE4ZDRlNzI2NDM5MGE0NWRmMGNlMWFhODcyYzYgPSAkKCc8ZGl2IGlkPSJodG1sXzNiZGUxOGQ0ZTcyNjQzOTBhNDVkZjBjZTFhYTg3MmM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3VudCBIb3BlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjMyOGMyNGI1MWQ0MWY2OTRhYTJiMjE2NTFlMzJhOC5zZXRDb250ZW50KGh0bWxfM2JkZTE4ZDRlNzI2NDM5MGE0NWRmMGNlMWFhODcyYzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTNmNzVkNDhlZWNmNDU5ZTk0ODQ2ZDliYjQxZDUwZTkuYmluZFBvcHVwKHBvcHVwXzA2MzI4YzI0YjUxZDQxZjY5NGFhMmIyMTY1MWUzMmE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2MWY0ZmQxOTFiOTQyZjNhOGM4Yzc3ZWI2ZGMyMGY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwMjgwMzMxMzEzNzQsLTczLjk2MzU1NjE0MDk0MzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1NDE1M2IxMGE3NTQ0ZDRhMjQ3NzI4MDIyZTU2MGMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkN2MzMWM1NjQ4ZDRhZmQ5M2JjODExODIyZWQwZjJhID0gJCgnPGRpdiBpZD0iaHRtbF82ZDdjMzFjNTY0OGQ0YWZkOTNiYzgxMTgyMmVkMGYyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3V0dG9uIFBsYWNlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTQxNTNiMTBhNzU0NGQ0YTI0NzcyODAyMmU1NjBjMS5zZXRDb250ZW50KGh0bWxfNmQ3YzMxYzU2NDhkNGFmZDkzYmM4MTE4MjJlZDBmMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTYxZjRmZDE5MWI5NDJmM2E4YzhjNzdlYjZkYzIwZjkuYmluZFBvcHVwKHBvcHVwX2M1NDE1M2IxMGE3NTQ0ZDRhMjQ3NzI4MDIyZTU2MGMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4ZTQ1MzFjZjVlNDRmZDM4ZTExMzE1NmRjNmJiMzg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQzNDE0MDkwMDczNTM2LC03My45NTM4Njc4MjEzMDc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NDI2NDExMzkyMzI0MmNmOWQ1MjQ5Yjg1YThlYTliYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODhjNzkxOTM0MTU0M2JlYmExNTU4Yzc3NTM2NWVkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjg4Yzc5MTkzNDE1NDNiZWJhMTU1OGM3NzUzNjVlZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1bnRlcnMgUG9pbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0MjY0MTEzOTIzMjQyY2Y5ZDUyNDliODVhOGVhOWJhLnNldENvbnRlbnQoaHRtbF8yODhjNzkxOTM0MTU0M2JlYmExNTU4Yzc3NTM2NWVkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOGU0NTMxY2Y1ZTQ0ZmQzOGUxMTMxNTZkYzZiYjM4NC5iaW5kUG9wdXAocG9wdXBfNTQyNjQxMTM5MjMyNDJjZjlkNTI0OWI4NWE4ZWE5YmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI3YzM1ZmE2OTc3NDRiMDhjMTUyYmE2MzlhNjFjNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTIwNDIzNjk1MDcyMiwtNzMuOTY3NzA4MjQ1ODE4MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmU0NmI5ZGJlNjQwNGYzMGJkOWVkNTgzNTUzNTNlNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJiNjU5ZmUzZGZkNDAyYzk5ZWMwOWViNWZhNjI4YjYgPSAkKCc8ZGl2IGlkPSJodG1sXzRiYjY1OWZlM2RmZDQwMmM5OWVjMDllYjVmYTYyOGI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UdXJ0bGUgQmF5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTQ2YjlkYmU2NDA0ZjMwYmQ5ZWQ1ODM1NTM1M2U1Zi5zZXRDb250ZW50KGh0bWxfNGJiNjU5ZmUzZGZkNDAyYzk5ZWMwOWViNWZhNjI4YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWI3YzM1ZmE2OTc3NDRiMDhjMTUyYmE2MzlhNjFjNGEuYmluZFBvcHVwKHBvcHVwXzZlNDZiOWRiZTY0MDRmMzBiZDllZDU4MzU1MzUzZTVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2NjZkNThkNTZjYzRiYzdiOWQ0NmIxYjg1N2JkODNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ2OTE3NDEwNzQwMTk1LC03My45NzEyMTkyODcyMjI2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDIwYWNhZDg0NjY0YzQ1YjZkN2FhYWIwOTRhZmExYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2M2ZWY3YzY2Y2M0NmRmYmYwOGZkMzVkNTg0NTVhYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjNjNmVmN2M2NmNjNDZkZmJmMDhmZDM1ZDU4NDU1YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlR1ZG9yIENpdHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkMjBhY2FkODQ2NjRjNDViNmQ3YWFhYjA5NGFmYTFhLnNldENvbnRlbnQoaHRtbF9mM2M2ZWY3YzY2Y2M0NmRmYmYwOGZkMzVkNTg0NTVhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NjY2ZDU4ZDU2Y2M0YmM3YjlkNDZiMWI4NTdiZDgzZi5iaW5kUG9wdXAocG9wdXBfZmQyMGFjYWQ4NDY2NGM0NWI2ZDdhYWFiMDk0YWZhMWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWQ5ODhkMzNlYTkxNDc0Yjk2Y2ViMjRhMzM0YzBhN2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzA5OTk1NTQ3NzA2MSwtNzMuOTc0MDUxNzA0NjkyMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzRhMjk4NmMxNDg1NGQ1YjllNGZkMjAxZmNkMGM4ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I5ZDI2ZWEyMzNiNDM3ZDlmYTRlNWZmNzE0ODEwYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzNiOWQyNmVhMjMzYjQzN2Q5ZmE0ZTVmZjcxNDgxMGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdHV5dmVzYW50IFRvd248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0YTI5ODZjMTQ4NTRkNWI5ZTRmZDIwMWZjZDBjOGVmLnNldENvbnRlbnQoaHRtbF8zYjlkMjZlYTIzM2I0MzdkOWZhNGU1ZmY3MTQ4MTBhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZDk4OGQzM2VhOTE0NzRiOTZjZWIyNGEzMzRjMGE3ZC5iaW5kUG9wdXAocG9wdXBfYzRhMjk4NmMxNDg1NGQ1YjllNGZkMjAxZmNkMGM4ZWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2ZlOTE5MWFiMTU4NGJlNGExNWU4YzFiMzQxMDFkMDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzk2NzMwNDc2Mzg0MjYsLTczLjk5MDk0NzEwNTI4MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjA4N2E2NmRlYzgwNDhiODhmMDNkOWRjMzIwNTQ3M2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGYwNWI0Yzc4ZDViNGYzZmI0YzI5OTdmN2FiYjc0MzkgPSAkKCc8ZGl2IGlkPSJodG1sX2RmMDViNGM3OGQ1YjRmM2ZiNGMyOTk3ZjdhYmI3NDM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GbGF0aXJvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA4N2E2NmRlYzgwNDhiODhmMDNkOWRjMzIwNTQ3M2Iuc2V0Q29udGVudChodG1sX2RmMDViNGM3OGQ1YjRmM2ZiNGMyOTk3ZjdhYmI3NDM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NmZTkxOTFhYjE1ODRiZTRhMTVlOGMxYjM0MTAxZDAyLmJpbmRQb3B1cChwb3B1cF9mMDg3YTY2ZGVjODA0OGI4OGYwM2Q5ZGMzMjA1NDczYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjNmMjhkOTQyYzk0MWE4YmQ3NzE2OTEyMDFkYTM0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NTY1MTgwNjA4MDc2LC03My45MTgxOTI4NjQzMTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGYyMmE1NDEyOWQ0NDNjOGEwODA3YzdiNzExMDUzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTg5ODhjMDQ4ZTk0YzlkYTk0MGY4NDkxMWM0YzZlYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOWE4OTg4YzA0OGU5NGM5ZGE5NDBmODQ5MTFjNGM2ZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1bm55c2lkZSBHYXJkZW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZGYyMmE1NDEyOWQ0NDNjOGEwODA3YzdiNzExMDUzYi5zZXRDb250ZW50KGh0bWxfOWE4OTg4YzA0OGU5NGM5ZGE5NDBmODQ5MTFjNGM2ZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2IzZjI4ZDk0MmM5NDFhOGJkNzcxNjkxMjAxZGEzNDIuYmluZFBvcHVwKHBvcHVwXzJkZjIyYTU0MTI5ZDQ0M2M4YTA4MDdjN2I3MTEwNTNiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2MzAyODI1Yjk5ZjRhY2NiOTI1NjJiNGRmYjEzMjM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM3MjUwNzE2OTQ0OTcsLTczLjkzMjQ0MjM1MjYwMTc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5NjcwMDczNjA2MzQ3NWQ4YWU1YjNkMWE3ZGE3MjNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5ZjcyNTkwNTM0ODRjNzNiZTQ4YTExNmMwMTA5YmNlID0gJCgnPGRpdiBpZD0iaHRtbF9jOWY3MjU5MDUzNDg0YzczYmU0OGExMTZjMDEwOWJjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qmxpc3N2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODk2NzAwNzM2MDYzNDc1ZDhhZTViM2QxYTdkYTcyM2Muc2V0Q29udGVudChodG1sX2M5ZjcyNTkwNTM0ODRjNzNiZTQ4YTExNmMwMTA5YmNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2MzAyODI1Yjk5ZjRhY2NiOTI1NjJiNGRmYjEzMjM3LmJpbmRQb3B1cChwb3B1cF84OTY3MDA3MzYwNjM0NzVkOGFlNWIzZDFhN2RhNzIzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDQwNTI1MDNmMDc0NmM5YWFiOTRhNTc2ZmYyOGFhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzI4MTA5MDkzMDE0LC03My45OTU1MDc1MTg4ODQxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODNkMmU2YTU3NjY0N2ZjYWY4MzViNzM3YTlhMTRiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzdhNzhhNmE1ZGY0ZDMwODkxODU3ZjU5ZjBiY2ZmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfN2M3YTc4YTZhNWRmNGQzMDg5MTg1N2Y1OWYwYmNmZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1bHRvbiBGZXJyeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjgzZDJlNmE1NzY2NDdmY2FmODM1YjczN2E5YTE0YjYuc2V0Q29udGVudChodG1sXzdjN2E3OGE2YTVkZjRkMzA4OTE4NTdmNTlmMGJjZmY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0NDA1MjUwM2YwNzQ2YzlhYWI5NGE1NzZmZjI4YWE4LmJpbmRQb3B1cChwb3B1cF82ODNkMmU2YTU3NjY0N2ZjYWY4MzViNzM3YTlhMTRiNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZGJiN2QxY2M1Mjg0NmUxOWVmNDk0NmNlMWE5NTg0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzMyMTQ5ODgyODc0LC03My45ODExMTYwMzU5MjM5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMmNiMWYyNzAwYzI0MjY4ODcwNmQ1YTM3OGNjYzE4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZmRmYmE3ODAzZWE0MTZjYTQwNDlmMzNiYTM1YWQ1MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmZkZmJhNzgwM2VhNDE2Y2E0MDQ5ZjMzYmEzNWFkNTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZpbmVnYXIgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTJjYjFmMjcwMGMyNDI2ODg3MDZkNWEzNzhjY2MxODEuc2V0Q29udGVudChodG1sX2JmZGZiYTc4MDNlYTQxNmNhNDA0OWYzM2JhMzVhZDUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkYmI3ZDFjYzUyODQ2ZTE5ZWY0OTQ2Y2UxYTk1ODQ5LmJpbmRQb3B1cChwb3B1cF9hMmNiMWYyNzAwYzI0MjY4ODcwNmQ1YTM3OGNjYzE4MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNzY3ZWIzYjBmNDU0OTFjYWEzYjNjMTNlMDY3ZTIzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTAzOTg2NTAzMjM3LC03My45MzA1MzEwODgxNzMzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzEwMTdjZjRhMjk0N2FhODEwYjNjZTI4NzBkNGViNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80M2E1ZjliZDYwNGI0YjI0YTRjZjlhYWEyMjlmMDY3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDNhNWY5YmQ2MDRiNGIyNGE0Y2Y5YWFhMjI5ZjA2N2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlZWtzdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzMTAxN2NmNGEyOTQ3YWE4MTBiM2NlMjg3MGQ0ZWI0LnNldENvbnRlbnQoaHRtbF80M2E1ZjliZDYwNGI0YjI0YTRjZjlhYWEyMjlmMDY3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNzY3ZWIzYjBmNDU0OTFjYWEzYjNjMTNlMDY3ZTIzMi5iaW5kUG9wdXAocG9wdXBfZTMxMDE3Y2Y0YTI5NDdhYTgxMGIzY2UyODcwZDRlYjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Q4M2M0MjBlYTU2NGRiNWJlYzUwOTg1MTg0MTFkZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzc4NjEwNDc2OTUzMSwtNzMuOTAzMzE2ODQ4NTI1OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE4ZTBjNzNkZGUxNDQyYTgxMmM3YmMxZjBiNjM3OTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODQwMTFmNThiNTk4NGQyMWI2MTEyZmEzMmRkYmU4ZmEgPSAkKCc8ZGl2IGlkPSJodG1sXzg0MDExZjU4YjU5ODRkMjFiNjExMmZhMzJkZGJlOGZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSBKdW5jdGlvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzE4ZTBjNzNkZGUxNDQyYTgxMmM3YmMxZjBiNjM3OTUuc2V0Q29udGVudChodG1sXzg0MDExZjU4YjU5ODRkMjFiNjExMmZhMzJkZGJlOGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNkODNjNDIwZWE1NjRkYjViZWM1MDk4NTE4NDExZGQzLmJpbmRQb3B1cChwb3B1cF8zMThlMGM3M2RkZTE0NDJhODEyYzdiYzFmMGI2Mzc5NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMGI2MTU1N2IyYTk0NzFkOTQ3Nzc5ZGVhYzY4MzZlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzE3NjMyODIyNjkyLC03My45ODg3NTI4MDc0NTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjYzE0OGZkNTQzNDQ1NDNiNTBhYzhhZjQ5NDlkMWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0NGI4ZjQ5NGUwZDQwNWI5NDBhM2MyMmVlNDk5M2YzID0gJCgnPGRpdiBpZD0iaHRtbF9iNDRiOGY0OTRlMGQ0MDViOTQwYTNjMjJlZTQ5OTNmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RHVtYm88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjYzE0OGZkNTQzNDQ1NDNiNTBhYzhhZjQ5NDlkMWJmLnNldENvbnRlbnQoaHRtbF9iNDRiOGY0OTRlMGQ0MDViOTQwYTNjMjJlZTQ5OTNmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMGI2MTU1N2IyYTk0NzFkOTQ3Nzc5ZGVhYzY4MzZlMC5iaW5kUG9wdXAocG9wdXBfZGNjMTQ4ZmQ1NDM0NDU0M2I1MGFjOGFmNDk0OWQxYmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdmZTJjNzVmODlmNDNhNDgwYzk5MmUxNTE2NmNhOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MDE4MDk1NzYzMTQ0NCwtNzQuMTIwNTkzOTk3MTgwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGZkYzg0MjY4MzA0NGU1MWE2NmEyYzdiYWVjZTU2MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWRiMjEyYzRmMzgzNDI5MGJjMjkwZjBiMmU5N2RmZTggPSAkKCc8ZGl2IGlkPSJodG1sXzlkYjIxMmM0ZjM4MzQyOTBiYzI5MGYwYjJlOTdkZmU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYW5vciBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZmRjODQyNjgzMDQ0ZTUxYTY2YTJjN2JhZWNlNTYwZS5zZXRDb250ZW50KGh0bWxfOWRiMjEyYzRmMzgzNDI5MGJjMjkwZjBiMmU5N2RmZTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTdmZTJjNzVmODlmNDNhNDgwYzk5MmUxNTE2NmNhOGQuYmluZFBvcHVwKHBvcHVwXzhmZGM4NDI2ODMwNDRlNTFhNjZhMmM3YmFlY2U1NjBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxNjM4YWJmYmZkYjRiNmM5MWJmZTY2NTZkYmJjZThhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjAzNzA2OTI2MjczNzEsLTc0LjEzMjA4NDQ3NDg0Mjk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwYjlkM2UzN2RmNzQ3ODNhYzliMjM2YzJhZmNiYjNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkMmFhZjViMDlhMTQyNTk5Zjc3MGVlNzA1MmRmYWZmID0gJCgnPGRpdiBpZD0iaHRtbF9kZDJhYWY1YjA5YTE0MjU5OWY3NzBlZTcwNTJkZmFmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsbG93YnJvb2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwYjlkM2UzN2RmNzQ3ODNhYzliMjM2YzJhZmNiYjNjLnNldENvbnRlbnQoaHRtbF9kZDJhYWY1YjA5YTE0MjU5OWY3NzBlZTcwNTJkZmFmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MTYzOGFiZmJmZGI0YjZjOTFiZmU2NjU2ZGJiY2U4YS5iaW5kUG9wdXAocG9wdXBfMzBiOWQzZTM3ZGY3NDc4M2FjOWIyMzZjMmFmY2JiM2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQ0ZjY3MjE2NDBlNDgyNTg0ZmNhNDc1MDM4NTk1N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDExMzk5MjIwOTE3NjYsLTc0LjIxNzc2NjM2MDY4NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljOWEzYTM5OTA5NTRmMDk4NTcyMGFmYzNjYzQyNjQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5NzVjZDFiNjFiMTRkZTRiZDAwMjczMDc1MjA3NjQ0ID0gJCgnPGRpdiBpZD0iaHRtbF9kOTc1Y2QxYjYxYjE0ZGU0YmQwMDI3MzA3NTIwNzY0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2FuZHkgR3JvdW5kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YzlhM2EzOTkwOTU0ZjA5ODU3MjBhZmMzY2M0MjY0Ny5zZXRDb250ZW50KGh0bWxfZDk3NWNkMWI2MWIxNGRlNGJkMDAyNzMwNzUyMDc2NDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTQ0ZjY3MjE2NDBlNDgyNTg0ZmNhNDc1MDM4NTk1N2IuYmluZFBvcHVwKHBvcHVwXzljOWEzYTM5OTA5NTRmMDk4NTcyMGFmYzNjYzQyNjQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2OWYzZmM5ZTBjNzQzOTY4YTQ5M2RiOGExYWEzNjc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTc5MTE4NzQyOTYxMjE0LC03NC4xMjcyNzI0MDYwNDk0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjE3NTUwODczMjA0NWEzODA5YjlhZmUzZWZmNGEzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODY1YzU2NDE3OWI0NzRhOTFhMWQ2MGFlMzgyMzJlNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjg2NWM1NjQxNzliNDc0YTkxYTFkNjBhZTM4MjMyZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVnYmVydHZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjE3NTUwODczMjA0NWEzODA5YjlhZmUzZWZmNGEzOC5zZXRDb250ZW50KGh0bWxfMjg2NWM1NjQxNzliNDc0YTkxYTFkNjBhZTM4MjMyZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDY5ZjNmYzllMGM3NDM5NjhhNDkzZGI4YTFhYTM2NzguYmluZFBvcHVwKHBvcHVwX2YyMTc1NTA4NzMyMDQ1YTM4MDliOWFmZTNlZmY0YTM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExOWNhZWQ1ODVlOTRmYmJhNmVkNDM5MjhhZDA2MDE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTY3Mzc1ODg5NTcwMzIsLTczLjg5MjEzNzYwMjMyODIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5ODUyYWMwMDQ0YzQ0MmFhMDVjNWI2NmM1NDQ0YjQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5YzU3YjFiZjU5NTQ3YTdiNDRhZGNmMDczMjA0ZjQ1ID0gJCgnPGRpdiBpZD0iaHRtbF9iOWM1N2IxYmY1OTU0N2E3YjQ0YWRjZjA3MzIwNGY0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um94YnVyeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzk4NTJhYzAwNDRjNDQyYWEwNWM1YjY2YzU0NDRiNDIuc2V0Q29udGVudChodG1sX2I5YzU3YjFiZjU5NTQ3YTdiNDRhZGNmMDczMjA0ZjQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ExOWNhZWQ1ODVlOTRmYmJhNmVkNDM5MjhhZDA2MDE5LmJpbmRQb3B1cChwb3B1cF83OTg1MmFjMDA0NGM0NDJhYTA1YzViNjZjNTQ0NGI0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTAwOTNiOGFmNDQ0OGIyOTc0ZWQzMzhkNzE5YmY1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5ODUyNTA5NTEzNzI1NSwtNzMuOTU5MTg0NTk0Mjg3MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODI0NzcwN2Q1ZTNiNDljYmFjNmNmYmRjMDY2ZmNmMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZmZjcyZTNmZjg0NDk1MmIzYWE2NTg4ZDc1ZDhkZjggPSAkKCc8ZGl2IGlkPSJodG1sX2Y2ZmY3MmUzZmY4NDQ5NTJiM2FhNjU4OGQ3NWQ4ZGY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib21lY3Jlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyNDc3MDdkNWUzYjQ5Y2JhYzZjZmJkYzA2NmZjZjE4LnNldENvbnRlbnQoaHRtbF9mNmZmNzJlM2ZmODQ0OTUyYjNhYTY1ODhkNzVkOGRmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTAwOTNiOGFmNDQ0OGIyOTc0ZWQzMzhkNzE5YmY1Ni5iaW5kUG9wdXAocG9wdXBfODI0NzcwN2Q1ZTNiNDljYmFjNmNmYmRjMDY2ZmNmMTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDhhZTU5MGUxMjc4NGNkMmFmNmM1ZDEyY2Q3ZjBjZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTY0MTQ1MTExNTgxODUsLTczLjg4MTE0MzE5MjAwNjA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5MDc4YjhlZDhjYzQzOTU5ZmM3ODU2MWRiNTRlOWU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwNTc1MTlmNjUxODQ3ZGJhNDUwYzRkY2Q4OTgzOGFhID0gJCgnPGRpdiBpZD0iaHRtbF83MDU3NTE5ZjY1MTg0N2RiYTQ1MGM0ZGNkODk4MzhhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlkZGxlIFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5MDc4YjhlZDhjYzQzOTU5ZmM3ODU2MWRiNTRlOWU5LnNldENvbnRlbnQoaHRtbF83MDU3NTE5ZjY1MTg0N2RiYTQ1MGM0ZGNkODk4MzhhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOGFlNTkwZTEyNzg0Y2QyYWY2YzVkMTJjZDdmMGNkYy5iaW5kUG9wdXAocG9wdXBfMzkwNzhiOGVkOGNjNDM5NTlmYzc4NTYxZGI1NGU5ZTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTk0OGUzNmMxN2UzNDhkOTgxMjA3MmVkYWZiY2EzMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MjYyNjQwNjczNDgxMiwtNzQuMjAxNTI1NTY0NTc2NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjdhZWJjYTY1MWNhNDMwMGE3OGM3NmJkNTA1NTI1ODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDA1ZGMzM2M1ZjY5NGJlMDk0ZTdmNGRlZDg2YWU2ZDcgPSAkKCc8ZGl2IGlkPSJodG1sXzAwNWRjMzNjNWY2OTRiZTA5NGU3ZjRkZWQ4NmFlNmQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QcmluY2UmIzM5O3MgQmF5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yN2FlYmNhNjUxY2E0MzAwYTc4Yzc2YmQ1MDU1MjU4MS5zZXRDb250ZW50KGh0bWxfMDA1ZGMzM2M1ZjY5NGJlMDk0ZTdmNGRlZDg2YWU2ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTk0OGUzNmMxN2UzNDhkOTgxMjA3MmVkYWZiY2EzMjUuYmluZFBvcHVwKHBvcHVwXzI3YWViY2E2NTFjYTQzMDBhNzhjNzZiZDUwNTUyNTgxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliZGQyYzFlYTYyNTRmYzE4N2E4YmM3NGY1MmRjOGNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTc2NTA2MjkzNzk0ODksLTc0LjEzNzkyNjYzNzcxNTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmYjRmNDBiMGFhYzQxZjQ5NjJhYWJkZWVjZTAzMzhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5NWIzMTRjODk1YzQzMjc5NGRlYTlhMDQyMTIxOTA3ID0gJCgnPGRpdiBpZD0iaHRtbF9mOTViMzE0Yzg5NWM0MzI3OTRkZWE5YTA0MjEyMTkwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGlnaHRob3VzZSBIaWxsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZmI0ZjQwYjBhYWM0MWY0OTYyYWFiZGVlY2UwMzM4ZS5zZXRDb250ZW50KGh0bWxfZjk1YjMxNGM4OTVjNDMyNzk0ZGVhOWEwNDIxMjE5MDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWJkZDJjMWVhNjI1NGZjMTg3YThiYzc0ZjUyZGM4Y2QuYmluZFBvcHVwKHBvcHVwXzZmYjRmNDBiMGFhYzQxZjQ5NjJhYWJkZWVjZTAzMzhlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAzMjk4MjAyMWEwYTRlYmJhNzQxNmEwZDE1OGY5MmYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTE5NTQxNDU3NDg5MDksLTc0LjIyOTU3MDgwNjI2OTQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmOTZhNWRhMDkzNzQ1NGViYTI5YTRhMzcwZGFjMDJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxYjAxZmUwYTk4YjQyMzg4MzM4MGQyODU1NmUwMzg2ID0gJCgnPGRpdiBpZD0iaHRtbF8zMWIwMWZlMGE5OGI0MjM4ODMzODBkMjg1NTZlMDM4NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmljaG1vbmQgVmFsbGV5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Zjk2YTVkYTA5Mzc0NTRlYmEyOWE0YTM3MGRhYzAyZi5zZXRDb250ZW50KGh0bWxfMzFiMDFmZTBhOThiNDIzODgzMzgwZDI4NTU2ZTAzODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDMyOTgyMDIxYTBhNGViYmE3NDE2YTBkMTU4ZjkyZjAuYmluZFBvcHVwKHBvcHVwXzVmOTZhNWRhMDkzNzQ1NGViYTI5YTRhMzcwZGFjMDJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjYmUwMDFhOWQwNjQ5M2ZhZmZkOGNkOWUzNTdiNDJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkwNjAxNTU2NzAxNDgsLTczLjgyNjY3NzU3MTM4NjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlMGQ2Njc3OWJhMDQ1YzY5MzMwYTllMmI2M2VlN2ZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiMmU3YTQ1ZDQ3ZDQyZjU5YWU4ZWUwZThmYmExMGNkID0gJCgnPGRpdiBpZD0iaHRtbF9hYjJlN2E0NWQ0N2Q0MmY1OWFlOGVlMGU4ZmJhMTBjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFsYmE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlMGQ2Njc3OWJhMDQ1YzY5MzMwYTllMmI2M2VlN2ZjLnNldENvbnRlbnQoaHRtbF9hYjJlN2E0NWQ0N2Q0MmY1OWFlOGVlMGU4ZmJhMTBjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xY2JlMDAxYTlkMDY0OTNmYWZmZDhjZDllMzU3YjQyZC5iaW5kUG9wdXAocG9wdXBfZGUwZDY2Nzc5YmEwNDVjNjkzMzBhOWUyYjYzZWU3ZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjIxODg3YmQ5Y2Q1NDc1ODlkZmY3M2Q2YmI4NzYzZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODE5OTg5MzQ1MTczLC03My44OTAzNDU3MDk4NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjIwYTM5YWUxNDQ3NDQ1NTlmM2QzNThlMzliYzJiYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQyNTY3OGJjMjZiNGY0M2FiZmU0NzUyYjc4MWYyMzMgPSAkKCc8ZGl2IGlkPSJodG1sXzVkMjU2NzhiYzI2YjRmNDNhYmZlNDc1MmI3ODFmMjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaWdobGFuZCBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjBhMzlhZTE0NDc0NDU1OWYzZDM1OGUzOWJjMmJjOS5zZXRDb250ZW50KGh0bWxfNWQyNTY3OGJjMjZiNGY0M2FiZmU0NzUyYjc4MWYyMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjIxODg3YmQ5Y2Q1NDc1ODlkZmY3M2Q2YmI4NzYzZjcuYmluZFBvcHVwKHBvcHVwX2IyMGEzOWFlMTQ0NzQ0NTU5ZjNkMzU4ZTM5YmMyYmM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5MDNlNDc1NGJhMTQzOWFhNGJmMTc0MzEzNWRmZThjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjA5Mzc3NzAxMTM3NjYsLTczLjk0ODQxNTE1MzI4ODkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3ZTA0ODk3NDA3YzQwMjA5MTI4MTJiYjUxNTdlYTBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3NmQ1YmY1NTJlYTQ5NGJiNTM4ODQyMTcwMjgzMzMzID0gJCgnPGRpdiBpZD0iaHRtbF9hNzZkNWJmNTUyZWE0OTRiYjUzODg0MjE3MDI4MzMzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFkaXNvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTdlMDQ4OTc0MDdjNDAyMDkxMjgxMmJiNTE1N2VhMGQuc2V0Q29udGVudChodG1sX2E3NmQ1YmY1NTJlYTQ5NGJiNTM4ODQyMTcwMjgzMzMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5MDNlNDc1NGJhMTQzOWFhNGJmMTc0MzEzNWRmZThjLmJpbmRQb3B1cChwb3B1cF9lN2UwNDg5NzQwN2M0MDIwOTEyODEyYmI1MTU3ZWEwZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNWE0YjRkYTk0MjQ0ZDczYjdhMjdjYzlkYWJlMzk5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1MjcyMjk3NjMzMDE3LC03My44NjE3MjU3NzU1NTExNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MjQ3MmYyNGQyZjM0OWY4ODQ0NmExMzc2ZTcwODdkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTA4MjFmZmNkMTg0YTdjYTBhNWNhMzk3NjE2MzY2MCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWEwODIxZmZjZDE4NGE3Y2EwYTVjYTM5NzYxNjM2NjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb254ZGFsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTI0NzJmMjRkMmYzNDlmODg0NDZhMTM3NmU3MDg3ZDAuc2V0Q29udGVudChodG1sXzlhMDgyMWZmY2QxODRhN2NhMGE1Y2EzOTc2MTYzNjYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1YTRiNGRhOTQyNDRkNzNiN2EyN2NjOWRhYmUzOTk1LmJpbmRQb3B1cChwb3B1cF85MjQ3MmYyNGQyZjM0OWY4ODQ0NmExMzc2ZTcwODdkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOWYxYTdlYWY2N2Y0ZDRjOWVjYmM1NjQ3YTRhZTY4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg2NTc4Nzg3ODAyOTgyLC03My44NTkzMTg2MzIyMTY0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmNlY2IwMWNmOTQ0ODhkODg5YWMxMDJmMzYzNmRiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MmZjNjI1MDA5YmY0ZWQ4YTc3YTVmY2I5YzIzNjg2NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTJmYzYyNTAwOWJmNGVkOGE3N2E1ZmNiOWMyMzY4NjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFsbGVydG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZmNlY2IwMWNmOTQ0ODhkODg5YWMxMDJmMzYzNmRiNC5zZXRDb250ZW50KGh0bWxfNTJmYzYyNTAwOWJmNGVkOGE3N2E1ZmNiOWMyMzY4NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTlmMWE3ZWFmNjdmNGQ0YzllY2JjNTY0N2E0YWU2OGUuYmluZFBvcHVwKHBvcHVwXzlmY2VjYjAxY2Y5NDQ4OGQ4ODlhYzEwMmYzNjM2ZGI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2OWYzOTdkYzMxNjQzNDZhNzEzMDczNjM3OTU1Nzk3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODcwMzkyMzkxNDE0NywtNzMuOTAxNTIyNjQ1MTMxNDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOWJhMGQwZmQxNTIyNDEyZGI1MTI4NDc0YjNhMjE0MGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTdkNTY4NDcwMDYxNDA3ZWFjNDdjMGE2YmZkMjkxYzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBjMGUyMDRhYjczNDIxZmI5NDE0OWQ2NTViMGI1NWYgPSAkKCc8ZGl2IGlkPSJodG1sX2IwYzBlMjA0YWI3MzQyMWZiOTQxNDlkNjU1YjBiNTVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LaW5nc2JyaWRnZSBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2Q1Njg0NzAwNjE0MDdlYWM0N2MwYTZiZmQyOTFjMi5zZXRDb250ZW50KGh0bWxfYjBjMGUyMDRhYjczNDIxZmI5NDE0OWQ2NTViMGI1NWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzY5ZjM5N2RjMzE2NDM0NmE3MTMwNzM2Mzc5NTU3OTcuYmluZFBvcHVwKHBvcHVwXzU3ZDU2ODQ3MDA2MTQwN2VhYzQ3YzBhNmJmZDI5MWMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhYTJlMjdkZTA2ZjQyZDBiMDE5OWQxYThmODhkMWJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ2OTI2MDY2NTg1NzksLTczLjk0ODE3NzA5OTIwMTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwYmRkNzU4MjQzYzRkNWQ5ZTUyOTI2YzFhNDBlNzMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyYzAyYzkwM2ZlNTRkMjdhNjliOTQ1MWI3YzJiYzMyID0gJCgnPGRpdiBpZD0iaHRtbF8yMmMwMmM5MDNmZTU0ZDI3YTY5Yjk0NTFiN2MyYmMzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RXJhc211czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBiZGQ3NTgyNDNjNGQ1ZDllNTI5MjZjMWE0MGU3MzEuc2V0Q29udGVudChodG1sXzIyYzAyYzkwM2ZlNTRkMjdhNjliOTQ1MWI3YzJiYzMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JhYTJlMjdkZTA2ZjQyZDBiMDE5OWQxYThmODhkMWJjLmJpbmRQb3B1cChwb3B1cF84MGJkZDc1ODI0M2M0ZDVkOWU1MjkyNmMxYTQwZTczMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYWMxZTZmYmRlZWQ0ZDRiYmU5MzFhN2Q3YTA0NWQxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjY1ODA4MjI3NTE5LC03NC4wMDAxMTEzNjIwMjYzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTcyNTRlMDJkMDQ0MzAyYjhhZDJjYzk5MmIxNTZjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZjhlMGFmOWI5OTE0ODI3YmFhNjE4ZjMwZGU1ZjlmNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGY4ZTBhZjliOTkxNDgyN2JhYTYxOGYzMGRlNWY5ZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1ZHNvbiBZYXJkczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGE3MjU0ZTAyZDA0NDMwMmI4YWQyY2M5OTJiMTU2YzYuc2V0Q29udGVudChodG1sXzRmOGUwYWY5Yjk5MTQ4MjdiYWE2MThmMzBkZTVmOWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhYzFlNmZiZGVlZDRkNGJiZTkzMWE3ZDdhMDQ1ZDFkLmJpbmRQb3B1cChwb3B1cF8wYTcyNTRlMDJkMDQ0MzAyYjhhZDJjYzk5MmIxNTZjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWZkYjg1YTdkOTk0N2FkYmFiZDI4NWNjYmJhMDk0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4NzMzNzc0MDE4NzQxLC03My44MDU1MzAwMjk2ODcxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMWU0MGJlNTVmOTY0NDNjOTEwNjhhY2FiM2ExODJjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZDE0NTVhYTYxMmY0NTViYWUwMDk1MWY2MWMwNDUyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmQxNDU1YWE2MTJmNDU1YmFlMDA5NTFmNjFjMDQ1MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhbW1lbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExZTQwYmU1NWY5NjQ0M2M5MTA2OGFjYWIzYTE4MmMwLnNldENvbnRlbnQoaHRtbF8yZDE0NTVhYTYxMmY0NTViYWUwMDk1MWY2MWMwNDUyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NWZkYjg1YTdkOTk0N2FkYmFiZDI4NWNjYmJhMDk0Yy5iaW5kUG9wdXAocG9wdXBfMTFlNDBiZTU1Zjk2NDQzYzkxMDY4YWNhYjNhMTgyYzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWNkYjBiNTdmYTg4NGFhODk4NGM1MTQ1YTcyOTEyMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTEzMjE2OTEyODM4MzQsLTczLjc2NTk2NzgxNDQ1NjI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzliYTBkMGZkMTUyMjQxMmRiNTEyODQ3NGIzYTIxNDBiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4ZTNmZGM5NzE0ODQyMDRhZDMxZDE5YzA2ZjgyYzJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwMzRmZmFlZTY4ZTQ0MWQ4NGQ3YTBkMzk2MTFiNmEyID0gJCgnPGRpdiBpZD0iaHRtbF8wMDM0ZmZhZWU2OGU0NDFkODRkN2EwZDM5NjExYjZhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF5c3dhdGVyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGUzZmRjOTcxNDg0MjA0YWQzMWQxOWMwNmY4MmMyZS5zZXRDb250ZW50KGh0bWxfMDAzNGZmYWVlNjhlNDQxZDg0ZDdhMGQzOTYxMWI2YTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWNkYjBiNTdmYTg4NGFhODk4NGM1MTQ1YTcyOTEyMDAuYmluZFBvcHVwKHBvcHVwX2Q4ZTNmZGM5NzE0ODQyMDRhZDMxZDE5YzA2ZjgyYzJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjOWE5Y2Y1Zjg5ZDQ4MjM4MzJjZmMyOWUxMWViM2NmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU2MDkxMjk3MDk0NzA2LC03My45NDU2MzA3MDMzNDA5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmY5OTQ3ZjNlMGU0YTFmYTRiZTg2YjhlYzE2NzZjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDlhNmIzNzFjN2I0MzdiYjA0N2NjODcwMWYyYzBlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjQ5YTZiMzcxYzdiNDM3YmIwNDdjYzg3MDFmMmMwZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlF1ZWVuc2JyaWRnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZmOTk0N2YzZTBlNGExZmE0YmU4NmI4ZWMxNjc2YzQuc2V0Q29udGVudChodG1sXzY0OWE2YjM3MWM3YjQzN2JiMDQ3Y2M4NzAxZjJjMGUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjOWE5Y2Y1Zjg5ZDQ4MjM4MzJjZmMyOWUxMWViM2NmLmJpbmRQb3B1cChwb3B1cF8wZmY5OTQ3ZjNlMGU0YTFmYTRiZTg2YjhlYzE2NzZjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMmZhM2U0MzRkNzk0NGYwYjM2MDM3OTA5NDNlYWMxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYxNzMxMDc5MjUyOTgzLC03NC4wODE3Mzk5MjIxMTk2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85YmEwZDBmZDE1MjI0MTJkYjUxMjg0NzRiM2EyMTQwYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTA1OTZlYzIyZWQ0ZGExYmE0NDMzMzk3MDgwMjg2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZjE2ZGFmYjA3MGU0NTljYjU5MGEyOTBiMDBhOGIwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWYxNmRhZmIwNzBlNDU5Y2I1OTBhMjkwYjAwYThiMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZveCBIaWxsczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzEwNTk2ZWMyMmVkNGRhMWJhNDQzMzM5NzA4MDI4NmQuc2V0Q29udGVudChodG1sX2FmMTZkYWZiMDcwZTQ1OWNiNTkwYTI5MGIwMGE4YjAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMyZmEzZTQzNGQ3OTQ0ZjBiMzYwMzc5MDk0M2VhYzE2LmJpbmRQb3B1cChwb3B1cF9jMTA1OTZlYzIyZWQ0ZGExYmE0NDMzMzk3MDgwMjg2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f16b879e6d8>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create map of New York using latitude and longitude values\n",
"print_map (newyork_data, zoom=10)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Borough</th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Manhattan</td>\n",
" <td>Marble Hill</td>\n",
" <td>40.876551</td>\n",
" <td>-73.910660</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Manhattan</td>\n",
" <td>Chinatown</td>\n",
" <td>40.715618</td>\n",
" <td>-73.994279</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Manhattan</td>\n",
" <td>Washington Heights</td>\n",
" <td>40.851903</td>\n",
" <td>-73.936900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Manhattan</td>\n",
" <td>Inwood</td>\n",
" <td>40.867684</td>\n",
" <td>-73.921210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Manhattan</td>\n",
" <td>Hamilton Heights</td>\n",
" <td>40.823604</td>\n",
" <td>-73.949688</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Borough Neighborhood Latitude Longitude\n",
"0 Manhattan Marble Hill 40.876551 -73.910660\n",
"1 Manhattan Chinatown 40.715618 -73.994279\n",
"2 Manhattan Washington Heights 40.851903 -73.936900\n",
"3 Manhattan Inwood 40.867684 -73.921210\n",
"4 Manhattan Hamilton Heights 40.823604 -73.949688"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"manhattan_data = newyork_data[newyork_data['Borough'] == 'Manhattan'].reset_index(drop=True)\n",
"manhattan_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNDAuNzMwODYxOSwtNzMuOTg3MTU1OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfMDlhNmE5NWI2MWVmNGY2NmJlZDFhMzE0MGI1ZWFhYzggPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNlZWQ0YmM2YmYzMzQyMDFhNGFkNGU2ZjQ1ODRlMDZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc2NTUwNzc4Nzk5NjQsLTczLjkxMDY1OTY1ODYyOTgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkOTIxMTcwY2M3YTRhZmViM2QwNWI0ODVkYWQ1MzNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5NzUxNWI4NjA0ZjRkYjBiZmExZWIzZmEzMzk1MWQzID0gJCgnPGRpdiBpZD0iaHRtbF82OTc1MTViODYwNGY0ZGIwYmZhMWViM2ZhMzM5NTFkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFyYmxlIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkOTIxMTcwY2M3YTRhZmViM2QwNWI0ODVkYWQ1MzNhLnNldENvbnRlbnQoaHRtbF82OTc1MTViODYwNGY0ZGIwYmZhMWViM2ZhMzM5NTFkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZWVkNGJjNmJmMzM0MjAxYTRhZDRlNmY0NTg0ZTA2Zi5iaW5kUG9wdXAocG9wdXBfZWQ5MjExNzBjYzdhNGFmZWIzZDA1YjQ4NWRhZDUzM2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZiOGNjZmZlNDhjNGVmN2I1MDUwN2FjNGFjZDU2ZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTU2MTg0MjIzMTQzMiwtNzMuOTk0Mjc5MzYyNTU5NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTY3NTZkZWY4YWNmNGE5YTkwMDA5OWE2YWU1ZjdhMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU3MjhiNDYxMTBkNGFlMWFhNDU0MjcwMWFjYzNjZmUgPSAkKCc8ZGl2IGlkPSJodG1sX2Y1NzI4YjQ2MTEwZDRhZTFhYTQ1NDI3MDFhY2MzY2ZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGluYXRvd248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2NzU2ZGVmOGFjZjRhOWE5MDAwOTlhNmFlNWY3YTFhLnNldENvbnRlbnQoaHRtbF9mNTcyOGI0NjExMGQ0YWUxYWE0NTQyNzAxYWNjM2NmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NmI4Y2NmZmU0OGM0ZWY3YjUwNTA3YWM0YWNkNTZkMC5iaW5kUG9wdXAocG9wdXBfNTY3NTZkZWY4YWNmNGE5YTkwMDA5OWE2YWU1ZjdhMWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGVlNzFlZDI2ZmZmNDA1MGJiYzg5MTllM2FhMzFiMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTE5MDI1MjU1NTMwNSwtNzMuOTM2OTAwMjc5ODUyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTBiYmQ2NWY0NWQ1NDJjZTg0MzBlODgxZTI5ODFmOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmVkMjZmMmY0YWE4NDhiMDk3YTU4YzU3MTZmNDk4NjkgPSAkKCc8ZGl2IGlkPSJodG1sXzZlZDI2ZjJmNGFhODQ4YjA5N2E1OGM1NzE2ZjQ5ODY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXNoaW5ndG9uIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwYmJkNjVmNDVkNTQyY2U4NDMwZTg4MWUyOTgxZjk1LnNldENvbnRlbnQoaHRtbF82ZWQyNmYyZjRhYTg0OGIwOTdhNThjNTcxNmY0OTg2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZWU3MWVkMjZmZmY0MDUwYmJjODkxOWUzYWEzMWIyMy5iaW5kUG9wdXAocG9wdXBfMTBiYmQ2NWY0NWQ1NDJjZTg0MzBlODgxZTI5ODFmOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY4YThlODFhOTY3NDVkYmEwNTE0ODc2YTAxMGJlMDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Njc2ODM5NjQ0OTkxNSwtNzMuOTIxMjEwNDIyMDM4OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTIyMTBlNDNmZDVhNDYxZTgzNDI2M2UzNWRmZTdmMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWNjZWNkY2VjMzAyNDEyZTkwOTAyZjM3ZTE5ZWUyMTEgPSAkKCc8ZGl2IGlkPSJodG1sXzljY2VjZGNlYzMwMjQxMmU5MDkwMmYzN2UxOWVlMjExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Jbndvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyMjEwZTQzZmQ1YTQ2MWU4MzQyNjNlMzVkZmU3ZjAyLnNldENvbnRlbnQoaHRtbF85Y2NlY2RjZWMzMDI0MTJlOTA5MDJmMzdlMTllZTIxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZjhhOGU4MWE5Njc0NWRiYTA1MTQ4NzZhMDEwYmUwMy5iaW5kUG9wdXAocG9wdXBfNTIyMTBlNDNmZDVhNDYxZTgzNDI2M2UzNWRmZTdmMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGIzYzliZTY4YTdhNDgwYTllYjA4NDdiMjY0ZjEzNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjM2MDQyODQ4MTE5MzUsLTczLjk0OTY4NzkxODgzMzY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiYWJiNGNkNmI0OTQ1NzU5MWY1NThlOWU4MTIxY2IyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjMGYwMDUxMTkxNTQ5MWE5MWI5ZGRlYmVjODUzZTlhID0gJCgnPGRpdiBpZD0iaHRtbF84YzBmMDA1MTE5MTU0OTFhOTFiOWRkZWJlYzg1M2U5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFtaWx0b24gSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmJhYmI0Y2Q2YjQ5NDU3NTkxZjU1OGU5ZTgxMjFjYjIuc2V0Q29udGVudChodG1sXzhjMGYwMDUxMTkxNTQ5MWE5MWI5ZGRlYmVjODUzZTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiM2M5YmU2OGE3YTQ4MGE5ZWIwODQ3YjI2NGYxMzczLmJpbmRQb3B1cChwb3B1cF9mYmFiYjRjZDZiNDk0NTc1OTFmNTU4ZTllODEyMWNiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDBjZTBkOThiY2Y0MjUzYjcwZmI2MGJiYjk0ZDBjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNjkzNDQyOTQ5NzgsLTczLjk1NzM4NTM5MzUxODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTc2MDgzZDU1YTVkNDdhYTkzYjg2YWUyZGEyOWRhMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjYyNTViNjk1Y2RhNDdlNGIyMWFmNjc4OGJjOGRhYzEgPSAkKCc8ZGl2IGlkPSJodG1sXzY2MjU1YjY5NWNkYTQ3ZTRiMjFhZjY3ODhiYzhkYWMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYW5oYXR0YW52aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTc2MDgzZDU1YTVkNDdhYTkzYjg2YWUyZGEyOWRhMGIuc2V0Q29udGVudChodG1sXzY2MjU1YjY5NWNkYTQ3ZTRiMjFhZjY3ODhiYzhkYWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwMGNlMGQ5OGJjZjQyNTNiNzBmYjYwYmJiOTRkMGNiLmJpbmRQb3B1cChwb3B1cF81NzYwODNkNTVhNWQ0N2FhOTNiODZhZTJkYTI5ZGEwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDY2ZThmMmNiMjY0NzcxYTFjNGE1ZGIzNWY1MGI4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNTk3NjA2NzQyNDE0LC03My45NDMyMTExMjYwMzkwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMWY0YjYxMTg2ZWQ0MDc1OTY5NzA1YTcwZDFhMWRlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWZlMWMxODUzNDc0YmY5ODk1YWJlOGRlMTM4MmZlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjlmZTFjMTg1MzQ3NGJmOTg5NWFiZThkZTEzODJmZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgSGFybGVtPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMWY0YjYxMTg2ZWQ0MDc1OTY5NzA1YTcwZDFhMWRlMS5zZXRDb250ZW50KGh0bWxfMjlmZTFjMTg1MzQ3NGJmOTg5NWFiZThkZTEzODJmZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjA2NmU4ZjJjYjI2NDc3MWExYzRhNWRiMzVmNTBiODcuYmluZFBvcHVwKHBvcHVwXzMxZjRiNjExODZlZDQwNzU5Njk3MDVhNzBkMWExZGUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MyYmI3ZTQ2Zjc4YTQxZTBiNWY3YzhmYTUzNzMwOTU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkyMjQ5NDY2NjMwMzMsLTczLjk0NDE4MjIzMTQ4NTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzMjdmMDE0NzgwNDRhZDU4OGU1YTA0MDhkYjc2YjNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkZWM5NGJhMWZiMDQwNWNhM2I0MTM4MDBmNjA0ZmJhID0gJCgnPGRpdiBpZD0iaHRtbF8wZGVjOTRiYTFmYjA0MDVjYTNiNDEzODAwZjYwNGZiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBIYXJsZW08L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzMjdmMDE0NzgwNDRhZDU4OGU1YTA0MDhkYjc2YjNhLnNldENvbnRlbnQoaHRtbF8wZGVjOTRiYTFmYjA0MDVjYTNiNDEzODAwZjYwNGZiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMmJiN2U0NmY3OGE0MWUwYjVmN2M4ZmE1MzczMDk1Ni5iaW5kUG9wdXAocG9wdXBfZjMyN2YwMTQ3ODA0NGFkNTg4ZTVhMDQwOGRiNzZiM2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzFiZTRhYmZhZDRmNDYwZmFjMzJlY2Y3ZjliM2EzMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU2Mzg1NzMzMDE4MDUsLTczLjk2MDUwNzYzMTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNzI5YWQ1MjEyZjRiZTdhZDEyMzZlY2U1MGVjMzQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1ZTk5MjM1MzI2ODRlZGViNzAzMjY2NzM5MDE1MzRjID0gJCgnPGRpdiBpZD0iaHRtbF8wNWU5OTIzNTMyNjg0ZWRlYjcwMzI2NjczOTAxNTM0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VXBwZXIgRWFzdCBTaWRlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YjcyOWFkNTIxMmY0YmU3YWQxMjM2ZWNlNTBlYzM0NC5zZXRDb250ZW50KGh0bWxfMDVlOTkyMzUzMjY4NGVkZWI3MDMyNjY3MzkwMTUzNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzFiZTRhYmZhZDRmNDYwZmFjMzJlY2Y3ZjliM2EzMTMuYmluZFBvcHVwKHBvcHVwXzhiNzI5YWQ1MjEyZjRiZTdhZDEyMzZlY2U1MGVjMzQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiMzZjMjY0OTYxMzRlNTBhMmM4N2ZkNmZmZDc3OTQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc1OTI5ODQ5ODg0ODc1LC03My45NDcxMTc4NDQ3MTgyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODE3MTY0OGQyNWQ0YmE5OTViMWIxMWY0MWYyN2QzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OTQ2MDZlZjY1MTU0NjNjOTdlNTdhODczNGRiZDE4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzk0NjA2ZWY2NTE1NDYzYzk3ZTU3YTg3MzRkYmQxODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPllvcmt2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjgxNzE2NDhkMjVkNGJhOTk1YjFiMTFmNDFmMjdkM2Quc2V0Q29udGVudChodG1sXzc5NDYwNmVmNjUxNTQ2M2M5N2U1N2E4NzM0ZGJkMTg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNiMzZjMjY0OTYxMzRlNTBhMmM4N2ZkNmZmZDc3OTQxLmJpbmRQb3B1cChwb3B1cF9iODE3MTY0OGQyNWQ0YmE5OTViMWIxMWY0MWYyN2QzZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYThhM2UzNGFmY2M0YmRmYTA2ZGUzMTk2MTU5YjMwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2ODExMjY1ODI4NzMzLC03My45NTg4NTk2ODgxMzc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjZjU3OGEyZDU0OTRjNWE4M2E4MjQ2ZmVkODdlOGYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhYzdlMjM1NTMxYTRhY2U5MjljMDI5YTI5YzBlNDMxID0gJCgnPGRpdiBpZD0iaHRtbF83YWM3ZTIzNTUzMWE0YWNlOTI5YzAyOWEyOWMwZTQzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVub3ggSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNmNTc4YTJkNTQ5NGM1YTgzYTgyNDZmZWQ4N2U4ZjMuc2V0Q29udGVudChodG1sXzdhYzdlMjM1NTMxYTRhY2U5MjljMDI5YTI5YzBlNDMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhOGEzZTM0YWZjYzRiZGZhMDZkZTMxOTYxNTliMzBmLmJpbmRQb3B1cChwb3B1cF81Y2Y1NzhhMmQ1NDk0YzVhODNhODI0NmZlZDg3ZThmMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83M2U0ZTg4YzA3MDg0Y2RiYTgxM2U4NTEyN2I5YjAyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MjE1OTYwNTc2MjgzLC03My45NDkxNjc2OTIyNzk1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YWI1MDc2YjE4NmE0ZDlkYjdmNmJmOTYzZWI3M2Q3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZmE2ZWNmNjI2MzA0NGI1YjBlYmFkYzZkMDVmZDFjZiA9ICQoJzxkaXYgaWQ9Imh0bWxfN2ZhNmVjZjYyNjMwNDRiNWIwZWJhZGM2ZDA1ZmQxY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvb3NldmVsdCBJc2xhbmQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhYjUwNzZiMTg2YTRkOWRiN2Y2YmY5NjNlYjczZDc5LnNldENvbnRlbnQoaHRtbF83ZmE2ZWNmNjI2MzA0NGI1YjBlYmFkYzZkMDVmZDFjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83M2U0ZTg4YzA3MDg0Y2RiYTgxM2U4NTEyN2I5YjAyMC5iaW5kUG9wdXAocG9wdXBfNmFiNTA3NmIxODZhNGQ5ZGI3ZjZiZjk2M2ViNzNkNzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjlhMmJiNWMwYzAyNDQxMjhhN2JiM2M5MjUxMGJkNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODc2NTc5OTg1MzQ4NTQsLTczLjk3NzA1OTIzNjMwNjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3ZTJhZTNiMzg5ZjQzNGY5OGZhMjYyZThmOGVmMjg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwYWMwZGRhOGIyNzQ4Zjg4ZDEyY2NlYWIzZTVjZjM4ID0gJCgnPGRpdiBpZD0iaHRtbF8wMGFjMGRkYThiMjc0OGY4OGQxMmNjZWFiM2U1Y2YzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VXBwZXIgV2VzdCBTaWRlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80N2UyYWUzYjM4OWY0MzRmOThmYTI2MmU4ZjhlZjI4OS5zZXRDb250ZW50KGh0bWxfMDBhYzBkZGE4YjI3NDhmODhkMTJjY2VhYjNlNWNmMzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjlhMmJiNWMwYzAyNDQxMjhhN2JiM2M5MjUxMGJkNTEuYmluZFBvcHVwKHBvcHVwXzQ3ZTJhZTNiMzg5ZjQzNGY5OGZhMjYyZThmOGVmMjg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhYzkzMjE5MmM2NjQ1OGZhYTJkOTE3NzVjOWNmNmEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzczNTI4ODg5NDIxNjYsLTczLjk4NTMzNzc3MDAxMjYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlMWM4NmQyNzQyYzQ1ZTJhN2M2MjA1NGFmNjZjOTlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJiOThiMzFlOGQ2ZDRlNDVhNjc0Njk0NzFjMjljMGExID0gJCgnPGRpdiBpZD0iaHRtbF8yYjk4YjMxZThkNmQ0ZTQ1YTY3NDY5NDcxYzI5YzBhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGluY29sbiBTcXVhcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlMWM4NmQyNzQyYzQ1ZTJhN2M2MjA1NGFmNjZjOTlkLnNldENvbnRlbnQoaHRtbF8yYjk4YjMxZThkNmQ0ZTQ1YTY3NDY5NDcxYzI5YzBhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYWM5MzIxOTJjNjY0NThmYWEyZDkxNzc1YzljZjZhMi5iaW5kUG9wdXAocG9wdXBfNGUxYzg2ZDI3NDJjNDVlMmE3YzYyMDU0YWY2NmM5OWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQ5NzQ4MjU3Y2U3NGZmZDhjNTM4ZjQzNmNmZjlmNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTkxMDA4OTE0NjIxMiwtNzMuOTk2MTE5MzYzMDk0NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGZiNTIxMzNjNjNjNGM0NGI5MzE1YzYxNTdkYTU1MTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWY0Yjk5NzU0ODZkNDczY2I0YjU2ODUyZjliMDNjNTYgPSAkKCc8ZGl2IGlkPSJodG1sXzVmNGI5OTc1NDg2ZDQ3M2NiNGI1Njg1MmY5YjAzYzU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGludG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZmI1MjEzM2M2M2M0YzQ0YjkzMTVjNjE1N2RhNTUxNC5zZXRDb250ZW50KGh0bWxfNWY0Yjk5NzU0ODZkNDczY2I0YjU2ODUyZjliMDNjNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTQ5NzQ4MjU3Y2U3NGZmZDhjNTM4ZjQzNmNmZjlmNWIuYmluZFBvcHVwKHBvcHVwXzBmYjUyMTMzYzYzYzRjNDRiOTMxNWM2MTU3ZGE1NTE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4MDI3NjZmMTAyMTQxZWU5ZTY0NWQ0NzlkMzM2MGIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjkxMTAyNzA2MjMsLTczLjk4MTY2ODgyNzMwMzA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkZTdiMThhNWNlMDQ2YzA4NjhhMjA0ODdkYjI3MTEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAwNWU5ODMyYjRmMDQ5ZjFiYjdkNTRlZTY3ZjIzMzVlID0gJCgnPGRpdiBpZD0iaHRtbF8wMDVlOTgzMmI0ZjA0OWYxYmI3ZDU0ZWU2N2YyMzM1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlkdG93bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRlN2IxOGE1Y2UwNDZjMDg2OGEyMDQ4N2RiMjcxMTIuc2V0Q29udGVudChodG1sXzAwNWU5ODMyYjRmMDQ5ZjFiYjdkNTRlZTY3ZjIzMzVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk4MDI3NjZmMTAyMTQxZWU5ZTY0NWQ0NzlkMzM2MGIzLmJpbmRQb3B1cChwb3B1cF80ZGU3YjE4YTVjZTA0NmMwODY4YTIwNDg3ZGIyNzExMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOGMzMWYyNGU1OWE0NjkyYjFmZjg3ZGZhODY2ZTkyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0ODMwMzA3NzI1MjE3NCwtNzMuOTc4MzMyMDc5MjQxMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTYwYmVmMzdlY2NhNGRlNzhhYzMwNzBlOTFmYTFjZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE3OWM4MjVhNmI3NDM1YzhjMTZmMTE0M2E3NmIwYWIgPSAkKCc8ZGl2IGlkPSJodG1sXzhhNzljODI1YTZiNzQzNWM4YzE2ZjExNDNhNzZiMGFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdXJyYXkgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTYwYmVmMzdlY2NhNGRlNzhhYzMwNzBlOTFmYTFjZGIuc2V0Q29udGVudChodG1sXzhhNzljODI1YTZiNzQzNWM4YzE2ZjExNDNhNzZiMGFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4YzMxZjI0ZTU5YTQ2OTJiMWZmODdkZmE4NjZlOTJmLmJpbmRQb3B1cChwb3B1cF9lNjBiZWYzN2VjY2E0ZGU3OGFjMzA3MGU5MWZhMWNkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MzdjMDBhYmEzMGI0MGVhYjFjZmJkZjA5ZmJjMDM5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDAzNDcwNjc0Nzk3NSwtNzQuMDAzMTE2MzM0NzI4MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGVmYjgwMDljNTE4NDc3MzljMzMxOWQyZWY0ZjA3ZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTY0MzBjYTQ3NjI1NDY0ZTk0M2RhOTE2YTVmZjZhN2YgPSAkKCc8ZGl2IGlkPSJodG1sX2U2NDMwY2E0NzYyNTQ2NGU5NDNkYTkxNmE1ZmY2YTdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGVsc2VhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWZiODAwOWM1MTg0NzczOWMzMzE5ZDJlZjRmMDdlMS5zZXRDb250ZW50KGh0bWxfZTY0MzBjYTQ3NjI1NDY0ZTk0M2RhOTE2YTVmZjZhN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjM3YzAwYWJhMzBiNDBlYWIxY2ZiZGYwOWZiYzAzOTEuYmluZFBvcHVwKHBvcHVwXzRlZmI4MDA5YzUxODQ3NzM5YzMzMTlkMmVmNGYwN2UxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlNGNmZDI5OTdjZTQ4MmFhMDE0NjY4MTA3YTFjMDljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI2OTMyODg1MzYxMjgsLTczLjk5OTkxNDAyOTQ1OTAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwNTFmMTkzMTQ5MzRmMWY4ZjkzZTI3ZjNhY2Q2OWYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxM2Y5NDU0ZmMwZTRiNGNhYzAzOTNlYTc0N2QwNjU0ID0gJCgnPGRpdiBpZD0iaHRtbF8wMTNmOTQ1NGZjMGU0YjRjYWMwMzkzZWE3NDdkMDY1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW53aWNoIFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwNTFmMTkzMTQ5MzRmMWY4ZjkzZTI3ZjNhY2Q2OWYwLnNldENvbnRlbnQoaHRtbF8wMTNmOTQ1NGZjMGU0YjRjYWMwMzkzZWE3NDdkMDY1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZTRjZmQyOTk3Y2U0ODJhYTAxNDY2ODEwN2ExYzA5Yy5iaW5kUG9wdXAocG9wdXBfMTA1MWYxOTMxNDkzNGYxZjhmOTNlMjdmM2FjZDY5ZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE4NzQ2ZjY3MjI1NDQxYWEwZWU4ZDJjOGU3NGRiNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjc4NDY3NzcyNzAyNDQsLTczLjk4MjIyNjE2NTA2NDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhZDNiOGQ2YTE3MjRmZGQ5M2NlNGZjMmU2NzZjYzliID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjZGE3NDVlYmQ2MjQ5MjI4NTA3OWI0Y2QxYmE1YmFmID0gJCgnPGRpdiBpZD0iaHRtbF9jY2RhNzQ1ZWJkNjI0OTIyODUwNzliNGNkMWJhNWJhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBWaWxsYWdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWQzYjhkNmExNzI0ZmRkOTNjZTRmYzJlNjc2Y2M5Yi5zZXRDb250ZW50KGh0bWxfY2NkYTc0NWViZDYyNDkyMjg1MDc5YjRjZDFiYTViYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmE4NzQ2ZjY3MjI1NDQxYWEwZWU4ZDJjOGU3NGRiNmUuYmluZFBvcHVwKHBvcHVwXzdhZDNiOGQ2YTE3MjRmZGQ5M2NlNGZjMmU2NzZjYzliKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzODhlZWVkNTNkZjRjYTdiZTM4MjUzZTc0ZTZlNjExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3ODA2NzQ4OTI3NjUsLTczLjk4MDg5MDMxOTk5MjkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5ZWFhOGNjZTFkMjQxMmQ5NjUwNTE2YTZjNThhNDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlN2E3MzM0NTU3MDQyNzc5YTNlMTg3MTU1YzAwOGFjID0gJCgnPGRpdiBpZD0iaHRtbF80ZTdhNzMzNDU1NzA0Mjc3OWEzZTE4NzE1NWMwMDhhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG93ZXIgRWFzdCBTaWRlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWVhYThjY2UxZDI0MTJkOTY1MDUxNmE2YzU4YTQxYy5zZXRDb250ZW50KGh0bWxfNGU3YTczMzQ1NTcwNDI3NzlhM2UxODcxNTVjMDA4YWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDM4OGVlZWQ1M2RmNGNhN2JlMzgyNTNlNzRlNmU2MTEuYmluZFBvcHVwKHBvcHVwX2U5ZWFhOGNjZTFkMjQxMmQ5NjUwNTE2YTZjNThhNDFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiZmUxZDI0ZmRkMjQ0OTA4NTc3MDU0NmZhMGYzYTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxNTIxOTY3NDQzMjE2LC03NC4wMTA2ODMyODU1OTA4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjU1MGI5ZTg1NDg0YjRhOGQ5ODUzMjRkOGM5YWRmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTJiYzQ1YTY4YmY0MjY4ODE0ZmZhYWMwMWQwNjIzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzEyYmM0NWE2OGJmNDI2ODgxNGZmYWFjMDFkMDYyMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyaWJlY2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmNTUwYjllODU0ODRiNGE4ZDk4NTMyNGQ4YzlhZGYzLnNldENvbnRlbnQoaHRtbF9jMTJiYzQ1YTY4YmY0MjY4ODE0ZmZhYWMwMWQwNjIzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYmZlMWQyNGZkZDI0NDkwODU3NzA1NDZmYTBmM2E2OC5iaW5kUG9wdXAocG9wdXBfZGY1NTBiOWU4NTQ4NGI0YThkOTg1MzI0ZDhjOWFkZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmEwNjQ1YTI3ODFhNDFiM2EyOTBjYmI0OTA1NmQxYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkzMjM3OTM5NTkwNywtNzMuOTk3MzA0NjcyMDgwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTVhNjhhM2U4MjU2NGQ0ZDg4ODZmMzBmNDVjMTE2YWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk5NDQzZDdiZmE2NGQ4NTkzMDUwNWJlZjQwMjhmMmYgPSAkKCc8ZGl2IGlkPSJodG1sXzk5OTQ0M2Q3YmZhNjRkODU5MzA1MDViZWY0MDI4ZjJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MaXR0bGUgSXRhbHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1YTY4YTNlODI1NjRkNGQ4ODg2ZjMwZjQ1YzExNmFlLnNldENvbnRlbnQoaHRtbF85OTk0NDNkN2JmYTY0ZDg1OTMwNTA1YmVmNDAyOGYyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YTA2NDVhMjc4MWE0MWIzYTI5MGNiYjQ5MDU2ZDFhMC5iaW5kUG9wdXAocG9wdXBfNTVhNjhhM2U4MjU2NGQ0ZDg4ODZmMzBmNDVjMTE2YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTIzY2EzODZmODNhNDVjNmI0MDc5YzIzOTM5MGJhYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjIxODM4NDEzMTc5NCwtNzQuMDAwNjU2NjY5NTk3NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ2YmIwOWQ2YjJiNDYzNTk0MGM4MDY1NDhmZDJlMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTkxMWNlZjcxYTY2NGNkYThlMThjMjdlMjE2YmNjNjQgPSAkKCc8ZGl2IGlkPSJodG1sX2U5MTFjZWY3MWE2NjRjZGE4ZTE4YzI3ZTIxNmJjYzY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb2hvPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZDZiYjA5ZDZiMmI0NjM1OTQwYzgwNjU0OGZkMmUyNy5zZXRDb250ZW50KGh0bWxfZTkxMWNlZjcxYTY2NGNkYThlMThjMjdlMjE2YmNjNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTIzY2EzODZmODNhNDVjNmI0MDc5YzIzOTM5MGJhYTYuYmluZFBvcHVwKHBvcHVwX2VkNmJiMDlkNmIyYjQ2MzU5NDBjODA2NTQ4ZmQyZTI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjN2ExNGM3MzRhMjQwNzk4OGYzNmJjNThlMTgxN2U5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0NDMzOTM1NzI0MzQsLTc0LjAwNjE3OTk4MTI2ODEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxZDA5NDkzZGExZjQ0MmZhYjYwNjFmNDc5MDNjMDcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjZDU0ZTAzNDBmNzRkZDM4MzAwY2IyZDdlOTc2MTBjID0gJCgnPGRpdiBpZD0iaHRtbF80Y2Q1NGUwMzQwZjc0ZGQzODMwMGNiMmQ3ZTk3NjEwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdCBWaWxsYWdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMWQwOTQ5M2RhMWY0NDJmYWI2MDYxZjQ3OTAzYzA3MC5zZXRDb250ZW50KGh0bWxfNGNkNTRlMDM0MGY3NGRkMzgzMDBjYjJkN2U5NzYxMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmM3YTE0YzczNGEyNDA3OTg4ZjM2YmM1OGUxODE3ZTkuYmluZFBvcHVwKHBvcHVwX2QxZDA5NDkzZGExZjQ0MmZhYjYwNjFmNDc5MDNjMDcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0YTgwZGMwMWUwNzQ1NDc4MGY0NjY3ZTNjNjYwNWEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk3MzA3MDQxNzAyODY1LC03My45NjQyODYxNzc0MDY1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNmUwNmY4NmMxYmE0M2QxYWZmNjdkNTQ1YTU5YzA0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MjgxZGFlYzU5ODg0Njk3YTQwZTc5ZDNkYTdmYzE3YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDI4MWRhZWM1OTg4NDY5N2E0MGU3OWQzZGE3ZmMxN2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbmhhdHRhbiBWYWxsZXk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2ZTA2Zjg2YzFiYTQzZDFhZmY2N2Q1NDVhNTljMDQ2LnNldENvbnRlbnQoaHRtbF80MjgxZGFlYzU5ODg0Njk3YTQwZTc5ZDNkYTdmYzE3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNGE4MGRjMDFlMDc0NTQ3ODBmNDY2N2UzYzY2MDVhMy5iaW5kUG9wdXAocG9wdXBfMjZlMDZmODZjMWJhNDNkMWFmZjY3ZDU0NWE1OWMwNDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzU3MDViNzQ0ZTIzNGQ2NDkzOWYxMDNlNDk1OTVjMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDc5OTk3MzgxNjU4MjYsLTczLjk2Mzg5NjI3OTA1MzMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2ZGIwNDExMGJjYjRmZWI4YTQ4NTE5NjlhOTM5YTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MmYxYTY1MWFlODQ0MmM5OGI4YjkwMjhlMzhkZWE3ID0gJCgnPGRpdiBpZD0iaHRtbF82NzJmMWE2NTFhZTg0NDJjOThiOGI5MDI4ZTM4ZGVhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9ybmluZ3NpZGUgSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjZkYjA0MTEwYmNiNGZlYjhhNDg1MTk2OWE5MzlhNTEuc2V0Q29udGVudChodG1sXzY3MmYxYTY1MWFlODQ0MmM5OGI4YjkwMjhlMzhkZWE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1NzA1Yjc0NGUyMzRkNjQ5MzlmMTAzZTQ5NTk1YzIzLmJpbmRQb3B1cChwb3B1cF9mNmRiMDQxMTBiY2I0ZmViOGE0ODUxOTY5YTkzOWE1MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZWFkMDFhNjhlNjA0ZTAxYWM4MDVhYTU3MjIzNzFjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNzIwOTgzMjcxNSwtNzMuOTgxMzc1OTQ4MzM1NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjg0YTNiNGVkZjdlNDJmOGE3MjM2ZDZmZTI5MzA0YWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODAyOTk1OGU0ZWRjNDkyNzkzYzFjMmUwODg1YWQ4NGIgPSAkKCc8ZGl2IGlkPSJodG1sXzgwMjk5NThlNGVkYzQ5Mjc5M2MxYzJlMDg4NWFkODRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFtZXJjeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg0YTNiNGVkZjdlNDJmOGE3MjM2ZDZmZTI5MzA0YWUuc2V0Q29udGVudChodG1sXzgwMjk5NThlNGVkYzQ5Mjc5M2MxYzJlMDg4NWFkODRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlYWQwMWE2OGU2MDRlMDFhYzgwNWFhNTcyMjM3MWM1LmJpbmRQb3B1cChwb3B1cF8yODRhM2I0ZWRmN2U0MmY4YTcyMzZkNmZlMjkzMDRhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDM0MTU0ZGM2NzQ0M2I1OTg1YzgwZWRhZjFhZWI4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTkzMTk4Mzk0NTY1LC03NC4wMTY4NjkzMDUwODYxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NDUzYTk5YWZiMDc0Y2FkOWJjMGEwOTcyYjU2NGJiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MzEzNDYxOWEyN2U0ODNmOTJiNjQ3ZjlmNDg2NGNlNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTMxMzQ2MTlhMjdlNDgzZjkyYjY0N2Y5ZjQ4NjRjZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhdHRlcnkgUGFyayBDaXR5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDUzYTk5YWZiMDc0Y2FkOWJjMGEwOTcyYjU2NGJiOC5zZXRDb250ZW50KGh0bWxfNTMxMzQ2MTlhMjdlNDgzZjkyYjY0N2Y5ZjQ4NjRjZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjAzNDE1NGRjNjc0NDNiNTk4NWM4MGVkYWYxYWViODYuYmluZFBvcHVwKHBvcHVwXzg0NTNhOTlhZmIwNzRjYWQ5YmMwYTA5NzJiNTY0YmI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkYTA4MTZjODE1YTRkN2E5MGRmMDUwY2FlYjc1OTEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA3MTA3MTA3MjcwNDgsLTc0LjAxMDY2NTQ0NTIxMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdiMzA1NTc5NTA0NDUzNGE3NDkyMjViZWJlZjMzNjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODcyYjUzYjkyNTM2NDQyOTllNGY0ZDEzZTY2NDkzMzUgPSAkKCc8ZGl2IGlkPSJodG1sXzg3MmI1M2I5MjUzNjQ0Mjk5ZTRmNGQxM2U2NjQ5MzM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GaW5hbmNpYWwgRGlzdHJpY3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3YjMwNTU3OTUwNDQ1MzRhNzQ5MjI1YmViZWYzMzYyLnNldENvbnRlbnQoaHRtbF84NzJiNTNiOTI1MzY0NDI5OWU0ZjRkMTNlNjY0OTMzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZGEwODE2YzgxNWE0ZDdhOTBkZjA1MGNhZWI3NTkxMC5iaW5kUG9wdXAocG9wdXBfYTdiMzA1NTc5NTA0NDUzNGE3NDkyMjViZWJlZjMzNjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzVmOWZmZmJjZTQwNDhiYzgyOGVlZmVmNzM5YzNiNmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODI2ODI1NjcxMjU3LC03My45NTMyNTY0NjgzNzExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lNjRmNzY3OTJkMTM0NzBkYjA1MDlmMDExZjM2M2RkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNjU5OWIwN2E5ZWU0NTQ1YmU4MzkzMGYzOTMzMmM5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjU1YTJlYmE1MDI0YjMzYmFlMTkyMjJhZmY0OTA3OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmI1NWEyZWJhNTAyNGIzM2JhZTE5MjIyYWZmNDkwNzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcm5lZ2llIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2NTk5YjA3YTllZTQ1NDViZTgzOTMwZjM5MzMyYzk0LnNldENvbnRlbnQoaHRtbF9mYjU1YTJlYmE1MDI0YjMzYmFlMTkyMjJhZmY0OTA3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNWY5ZmZmYmNlNDA0OGJjODI4ZWVmZWY3MzljM2I2ZC5iaW5kUG9wdXAocG9wdXBfMjY1OTliMDdhOWVlNDU0NWJlODM5MzBmMzkzMzJjOTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDE4MDk1OWM3OTljNDg1YjhlNGM0YWFkMzc0MzljZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjMyNTkwMTg4NTc2OCwtNzMuOTg4NDMzNjgwMjM1OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzU1MTU3Y2VhYzFlNDRkNjlkZGQzMWRmZWMyMDcyZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDhkNGM0MTNlMDQzNDc2ZTg3YWI1ZWNiN2NkNmYxMDUgPSAkKCc8ZGl2IGlkPSJodG1sXzQ4ZDRjNDEzZTA0MzQ3NmU4N2FiNWVjYjdjZDZmMTA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob2hvPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTUxNTdjZWFjMWU0NGQ2OWRkZDMxZGZlYzIwNzJmNC5zZXRDb250ZW50KGh0bWxfNDhkNGM0MTNlMDQzNDc2ZTg3YWI1ZWNiN2NkNmYxMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDE4MDk1OWM3OTljNDg1YjhlNGM0YWFkMzc0MzljZmQuYmluZFBvcHVwKHBvcHVwX2M1NTE1N2NlYWMxZTQ0ZDY5ZGRkMzFkZmVjMjA3MmY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxMmE3ODY2MThjZTQyMjBiNGJjODlmZDU0OTBiODRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE1MjI4OTIwNDYyODIsLTc0LjAwNTQxNTI5ODczMzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0NGJmNjYxYzhlZTRkOWFhYzIyYTU5ZjQ1ZGQwMjM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5ZThhMGJhM2UwNTQ2NTZhMWFjNjYxOWQ1MzNjZTI5ID0gJCgnPGRpdiBpZD0iaHRtbF8yOWU4YTBiYTNlMDU0NjU2YTFhYzY2MTlkNTMzY2UyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2l2aWMgQ2VudGVyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDRiZjY2MWM4ZWU0ZDlhYWMyMmE1OWY0NWRkMDIzNS5zZXRDb250ZW50KGh0bWxfMjllOGEwYmEzZTA1NDY1NmExYWM2NjE5ZDUzM2NlMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTEyYTc4NjYxOGNlNDIyMGI0YmM4OWZkNTQ5MGI4NGUuYmluZFBvcHVwKHBvcHVwX2Y0NGJmNjYxYzhlZTRkOWFhYzIyYTU5ZjQ1ZGQwMjM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0YWM1NTczZDk1ZDQwY2VhMTZkMGZjMTYzMTAyZTUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NTA5NjY0MzEyMiwtNzMuOTg4NzEzMTMyODUyNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDA1Y2NhNjA0NGNlNDAyYTg1MWNmMjNiMGM3MmQzODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJkNzY3OGUyZWUwNDdiNjliYmQ3NjZjZjBhNGJjYTUgPSAkKCc8ZGl2IGlkPSJodG1sXzkyZDc2NzhlMmVlMDQ3YjY5YmJkNzY2Y2YwYTRiY2E1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWR0b3duIFNvdXRoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDVjY2E2MDQ0Y2U0MDJhODUxY2YyM2IwYzcyZDM4Mi5zZXRDb250ZW50KGh0bWxfOTJkNzY3OGUyZWUwNDdiNjliYmQ3NjZjZjBhNGJjYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjRhYzU1NzNkOTVkNDBjZWExNmQwZmMxNjMxMDJlNTAuYmluZFBvcHVwKHBvcHVwXzAwNWNjYTYwNDRjZTQwMmE4NTFjZjIzYjBjNzJkMzgyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxZDM1MjlhZDAxYzQ4MTNiZmFhOWI4N2FiZjUwZDc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwMjgwMzMxMzEzNzQsLTczLjk2MzU1NjE0MDk0MzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4ZGJjNDYyZGQwNzRiZDFiMDU2ZTUzNWRkZDYyMDNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhNjVhMWYzOWExYTQyZGFiNTc1ODRlNWI3NmQwNDc0ID0gJCgnPGRpdiBpZD0iaHRtbF9lYTY1YTFmMzlhMWE0MmRhYjU3NTg0ZTViNzZkMDQ3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3V0dG9uIFBsYWNlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGRiYzQ2MmRkMDc0YmQxYjA1NmU1MzVkZGQ2MjAzZS5zZXRDb250ZW50KGh0bWxfZWE2NWExZjM5YTFhNDJkYWI1NzU4NGU1Yjc2ZDA0NzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjFkMzUyOWFkMDFjNDgxM2JmYWE5Yjg3YWJmNTBkNzkuYmluZFBvcHVwKHBvcHVwX2M4ZGJjNDYyZGQwNzRiZDFiMDU2ZTUzNWRkZDYyMDNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmZTI4Yzc1ZGY4OTRlYzlhMjc2ZDQ1NTQ1NjY5N2VlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUyMDQyMzY5NTA3MjIsLTczLjk2NzcwODI0NTgxODM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3MTgxODAwMjQ3MzQ3MTdiMjQxMDE2N2U2ZDM2YzhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5OTQwMzBkYTVlNjQ4OWY4ZjM5NzVhOTE2NTljMTU5ID0gJCgnPGRpdiBpZD0iaHRtbF84OTk0MDMwZGE1ZTY0ODlmOGYzOTc1YTkxNjU5YzE1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VHVydGxlIEJheTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODcxODE4MDAyNDczNDcxN2IyNDEwMTY3ZTZkMzZjOGIuc2V0Q29udGVudChodG1sXzg5OTQwMzBkYTVlNjQ4OWY4ZjM5NzVhOTE2NTljMTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmZTI4Yzc1ZGY4OTRlYzlhMjc2ZDQ1NTQ1NjY5N2VlLmJpbmRQb3B1cChwb3B1cF84NzE4MTgwMDI0NzM0NzE3YjI0MTAxNjdlNmQzNmM4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjhjNmZkYjEyYjk0M2NjYTg5ZDk1NzBiNjgyYjAxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NjkxNzQxMDc0MDE5NSwtNzMuOTcxMjE5Mjg3MjIyNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmE1MTdhOTNhNTgxNDMyNWExNmU4NGZmYWYxODllOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTcyOTA1YmJiNzk0NDViYWI0MDhlMmRlZGFjNzQzOTQgPSAkKCc8ZGl2IGlkPSJodG1sX2U3MjkwNWJiYjc5NDQ1YmFiNDA4ZTJkZWRhYzc0Mzk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UdWRvciBDaXR5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYTUxN2E5M2E1ODE0MzI1YTE2ZTg0ZmZhZjE4OWU5YS5zZXRDb250ZW50KGh0bWxfZTcyOTA1YmJiNzk0NDViYWI0MDhlMmRlZGFjNzQzOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTI4YzZmZGIxMmI5NDNjY2E4OWQ5NTcwYjY4MmIwMWUuYmluZFBvcHVwKHBvcHVwX2ZhNTE3YTkzYTU4MTQzMjVhMTZlODRmZmFmMTg5ZTlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxM2NmYmM2YjAxYjQyMDdhOThiM2I5YTU5ODM4OTgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMwOTk5NTU0NzcwNjEsLTczLjk3NDA1MTcwNDY5MjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkNTYwMTQ5OTNmZTQ2NjNhNzlkNzNkMjJiZmIzZDNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4ZjQ4OTJkNDExNDQ2YmRhYzI5OGU1M2EwNGI2ZDZhID0gJCgnPGRpdiBpZD0iaHRtbF81OGY0ODkyZDQxMTQ0NmJkYWMyOThlNTNhMDRiNmQ2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3R1eXZlc2FudCBUb3duPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZDU2MDE0OTkzZmU0NjYzYTc5ZDczZDIyYmZiM2QzZS5zZXRDb250ZW50KGh0bWxfNThmNDg5MmQ0MTE0NDZiZGFjMjk4ZTUzYTA0YjZkNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTEzY2ZiYzZiMDFiNDIwN2E5OGIzYjlhNTk4Mzg5ODEuYmluZFBvcHVwKHBvcHVwXzlkNTYwMTQ5OTNmZTQ2NjNhNzlkNzNkMjJiZmIzZDNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmZGIyYjY3MmNhNDQ4MTU5MjBkMDQ1NzhjNmVkZWYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5NjczMDQ3NjM4NDI2LC03My45OTA5NDcxMDUyODI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2U2NGY3Njc5MmQxMzQ3MGRiMDUwOWYwMTFmMzYzZGQ0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwODQ3OWY2ZDE3ZDRiZTY5MWNmZGRiM2RiZjgzYzA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxM2Y5ZmVlMjgzOTQyYzI5N2E3ZDdlYzY1OGEyYmIwID0gJCgnPGRpdiBpZD0iaHRtbF9mMTNmOWZlZTI4Mzk0MmMyOTdhN2Q3ZWM2NThhMmJiMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmxhdGlyb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwODQ3OWY2ZDE3ZDRiZTY5MWNmZGRiM2RiZjgzYzA0LnNldENvbnRlbnQoaHRtbF9mMTNmOWZlZTI4Mzk0MmMyOTdhN2Q3ZWM2NThhMmJiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZmRiMmI2NzJjYTQ0ODE1OTIwZDA0NTc4YzZlZGVmMy5iaW5kUG9wdXAocG9wdXBfZDA4NDc5ZjZkMTdkNGJlNjkxY2ZkZGIzZGJmODNjMDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWUxODNiYWIwNmNmNGQ0NTgzNGQ0MGZlMGY2YTU5N2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTY2NTgwODIyNzUxOSwtNzQuMDAwMTExMzYyMDI2MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfZTY0Zjc2NzkyZDEzNDcwZGIwNTA5ZjAxMWYzNjNkZDQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjcwYzY3ZmY2OTAzNDBkNmJkMzY1MGVkOTg5MTc4YjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmRkYzVjNWI2MzU2NGVjNjhiOWNlZTYyMWMwZTViMmQgPSAkKCc8ZGl2IGlkPSJodG1sX2JkZGM1YzViNjM1NjRlYzY4YjljZWU2MjFjMGU1YjJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdWRzb24gWWFyZHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3MGM2N2ZmNjkwMzQwZDZiZDM2NTBlZDk4OTE3OGI5LnNldENvbnRlbnQoaHRtbF9iZGRjNWM1YjYzNTY0ZWM2OGI5Y2VlNjIxYzBlNWIyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTE4M2JhYjA2Y2Y0ZDQ1ODM0ZDQwZmUwZjZhNTk3ZS5iaW5kUG9wdXAocG9wdXBfYjcwYzY3ZmY2OTAzNDBkNmJkMzY1MGVkOTg5MTc4YjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f16b5bc0630>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create map of Manhattan using latitude and longitude values\n",
"print_map (manhattan_data, zoom=10)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Borough</th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Bronx</td>\n",
" <td>Wakefield</td>\n",
" <td>40.894705</td>\n",
" <td>-73.847201</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Bronx</td>\n",
" <td>Co-op City</td>\n",
" <td>40.874294</td>\n",
" <td>-73.829939</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Bronx</td>\n",
" <td>Eastchester</td>\n",
" <td>40.887556</td>\n",
" <td>-73.827806</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Bronx</td>\n",
" <td>Fieldston</td>\n",
" <td>40.895437</td>\n",
" <td>-73.905643</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Bronx</td>\n",
" <td>Riverdale</td>\n",
" <td>40.890834</td>\n",
" <td>-73.912585</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Borough Neighborhood Latitude Longitude\n",
"0 Bronx Wakefield 40.894705 -73.847201\n",
"1 Bronx Co-op City 40.874294 -73.829939\n",
"2 Bronx Eastchester 40.887556 -73.827806\n",
"3 Bronx Fieldston 40.895437 -73.905643\n",
"4 Bronx Riverdale 40.890834 -73.912585"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bronx_data = newyork_data[newyork_data['Borough'] == 'Bronx'].reset_index(drop=True)\n",
"bronx_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTAgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNDAuNzMwODYxOSwtNzMuOTg3MTU1OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfZDk2ZDM3MjMzZDAzNDQ5NmE3Mzg2YTA2ZGY4MmE5OGMgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjOWUwMTcwNmRhMTRiZmI4Y2IxYjU0NjBlMjU0ZDg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODk0NzA1MTc2NjEsLTczLjg0NzIwMDUyMDU0OTAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiYWExZjAyMTg5NTQyYWE5ZDYwMDVlMGQ5YTAwYzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNDNhNWJhOGI5NjRkOTQ4MzY0MDFiNzExN2U4ZDE3ID0gJCgnPGRpdiBpZD0iaHRtbF85MzQzYTViYThiOTY0ZDk0ODM2NDAxYjcxMTdlOGQxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FrZWZpZWxkPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYmFhMWYwMjE4OTU0MmFhOWQ2MDA1ZTBkOWEwMGMyNy5zZXRDb250ZW50KGh0bWxfOTM0M2E1YmE4Yjk2NGQ5NDgzNjQwMWI3MTE3ZThkMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWM5ZTAxNzA2ZGExNGJmYjhjYjFiNTQ2MGUyNTRkODguYmluZFBvcHVwKHBvcHVwXzNiYWExZjAyMTg5NTQyYWE5ZDYwMDVlMGQ5YTAwYzI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYwODlhZmViODc3MzRjYzdhZmE2MTI0MTUxM2U5ZDM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODc0Mjk0MTkzMDMwMTIsLTczLjgyOTkzOTEwODEyMzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkZTRlNTUxYjFjNTRkNDE4MTg0NjU4MzJjMjQwMzczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlOTNkOWI1NzcwNDQzODZiNjc4YmJkNTlkZTY4M2I5ID0gJCgnPGRpdiBpZD0iaHRtbF9jZTkzZDliNTc3MDQ0Mzg2YjY3OGJiZDU5ZGU2ODNiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q28tb3AgQ2l0eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWRlNGU1NTFiMWM1NGQ0MTgxODQ2NTgzMmMyNDAzNzMuc2V0Q29udGVudChodG1sX2NlOTNkOWI1NzcwNDQzODZiNjc4YmJkNTlkZTY4M2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYwODlhZmViODc3MzRjYzdhZmE2MTI0MTUxM2U5ZDM3LmJpbmRQb3B1cChwb3B1cF81ZGU0ZTU1MWIxYzU0ZDQxODE4NDY1ODMyYzI0MDM3Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMzhjZGVlMGUyYTA0MmJhYmI3NDZlNDBkYzAyZDVkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4NzU1NTY3NzM1MDc3NSwtNzMuODI3ODA2NDQ3MTY0MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWI0MjhiYmY4NTVhNDBhMmJjODU5ZmMzYTE2NzAyZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWRhYzQ4YmI3M2YyNGE1OGI2ZmY3YmY1YmQzZTg0YmQgPSAkKCc8ZGl2IGlkPSJodG1sX2FkYWM0OGJiNzNmMjRhNThiNmZmN2JmNWJkM2U4NGJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0Y2hlc3RlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI0MjhiYmY4NTVhNDBhMmJjODU5ZmMzYTE2NzAyZGUuc2V0Q29udGVudChodG1sX2FkYWM0OGJiNzNmMjRhNThiNmZmN2JmNWJkM2U4NGJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEzOGNkZWUwZTJhMDQyYmFiYjc0NmU0MGRjMDJkNWQ5LmJpbmRQb3B1cChwb3B1cF8xYjQyOGJiZjg1NWE0MGEyYmM4NTlmYzNhMTY3MDJkZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTU5ODJmZjNkY2I0YzQxODY4MjI1NTM5NjVkMmViNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg5NTQzNzQyNjkwMzgzLC03My45MDU2NDI1OTU5MTY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNjFjZGM1YjI3YmE0ZjA1OTEwNzkxYzkyZDA2YWM5ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGZjNWIzMDBjOTg0MjY1YTE0ZWE1Njg4OTBkNGRkMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGRmYzViMzAwYzk4NDI2NWExNGVhNTY4ODkwZDRkZDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZpZWxkc3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTYxY2RjNWIyN2JhNGYwNTkxMDc5MWM5MmQwNmFjOWYuc2V0Q29udGVudChodG1sXzRkZmM1YjMwMGM5ODQyNjVhMTRlYTU2ODg5MGQ0ZGQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlNTk4MmZmM2RjYjRjNDE4NjgyMjU1Mzk2NWQyZWI2LmJpbmRQb3B1cChwb3B1cF9hNjFjZGM1YjI3YmE0ZjA1OTEwNzkxYzkyZDA2YWM5Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGExNTRiZWNhNDM0NTlhYWM5MjhjYWRkMjQ5ZjM1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg5MDgzNDQ5Mzg5MTMwNSwtNzMuOTEyNTg1NDYxMDg1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGUzN2RkOWRhMmM0MDBiOGJkOWQzYjg2MzI5N2Y1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MDgwYWQ5OWE5MDU0MGUxODA3MGI1MzcxZGIwMWJhNSA9ICQoJzxkaXYgaWQ9Imh0bWxfODA4MGFkOTlhOTA1NDBlMTgwNzBiNTM3MWRiMDFiYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyZGFsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDhlMzdkZDlkYTJjNDAwYjhiZDlkM2I4NjMyOTdmNTguc2V0Q29udGVudChodG1sXzgwODBhZDk5YTkwNTQwZTE4MDcwYjUzNzFkYjAxYmE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0YTE1NGJlY2E0MzQ1OWFhYzkyOGNhZGQyNDlmMzU5LmJpbmRQb3B1cChwb3B1cF9kOGUzN2RkOWRhMmM0MDBiOGJkOWQzYjg2MzI5N2Y1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZTVlN2E0M2RhMTc0ODllOTU1MzJlNTFhZjE1ZDZhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg4MTY4NzM3MTIwNTIxLC03My45MDI4MTc5ODcyNDYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YTYzNTZiMDZhZjQ0YmYzYmU4ZmUzYzVkZTViZGViMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NDVkNmY0NDUyNmU0MmE1OWI0NTI1ZDg0ODdlYTlhNyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjQ1ZDZmNDQ1MjZlNDJhNTliNDUyNWQ4NDg3ZWE5YTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpbmdzYnJpZGdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YTYzNTZiMDZhZjQ0YmYzYmU4ZmUzYzVkZTViZGViMi5zZXRDb250ZW50KGh0bWxfNjQ1ZDZmNDQ1MjZlNDJhNTliNDUyNWQ4NDg3ZWE5YTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmU1ZTdhNDNkYTE3NDg5ZTk1NTMyZTUxYWYxNWQ2YTMuYmluZFBvcHVwKHBvcHVwXzlhNjM1NmIwNmFmNDRiZjNiZThmZTNjNWRlNWJkZWIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1MjljYmNhNTE2ZTQ0YTdiOGIwYWQ5YWU1YzFiNWMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODk4MjcyNjEyMTM4MDUsLTczLjg2NzMxNDk2ODE0MTc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmMjBkOTU1MzQxYzRkNmZiMTlkYmJhZjE1YjEzYzFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1MzNiNWIxNjA2YTQ4MjBhZDJlZDU0OTdlMDM1MGE1ID0gJCgnPGRpdiBpZD0iaHRtbF84NTMzYjViMTYwNmE0ODIwYWQyZWQ1NDk3ZTAzNTBhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V29vZGxhd248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMjBkOTU1MzQxYzRkNmZiMTlkYmJhZjE1YjEzYzFjLnNldENvbnRlbnQoaHRtbF84NTMzYjViMTYwNmE0ODIwYWQyZWQ1NDk3ZTAzNTBhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NTI5Y2JjYTUxNmU0NGE3YjhiMGFkOWFlNWMxYjVjMC5iaW5kUG9wdXAocG9wdXBfOGYyMGQ5NTUzNDFjNGQ2ZmIxOWRiYmFmMTViMTNjMWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQxOWZkM2I5ZTg4NDgwMTg2Y2IzYWI3ODkwNTkwNjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NzcyMjQxNTU5OTQ0NiwtNzMuODc5MzkwNzM5NTY4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTgwZTBiNWQ3NTI0YzI5YmFjMmY2NjhlM2Y4N2U1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjZmNDA2YmMxYmI0OTYyOThiNzE4MmQxNTJkMDhmYyA9ICQoJzxkaXYgaWQ9Imh0bWxfN2I2ZjQwNmJjMWJiNDk2Mjk4YjcxODJkMTUyZDA4ZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcndvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5ODBlMGI1ZDc1MjRjMjliYWMyZjY2OGUzZjg3ZTVlLnNldENvbnRlbnQoaHRtbF83YjZmNDA2YmMxYmI0OTYyOThiNzE4MmQxNTJkMDhmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NDE5ZmQzYjllODg0ODAxODZjYjNhYjc4OTA1OTA2NS5iaW5kUG9wdXAocG9wdXBfNTk4MGUwYjVkNzUyNGMyOWJhYzJmNjY4ZTNmODdlNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzk5OWUyZDNkMTc0NDQ3ZWJkMGFkMWNlZGEyOTgxZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44ODEwMzg4NzgxOTIxMSwtNzMuODU3NDQ2NDI5NzQyMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTVmY2FhN2MxODlkNDY1Y2FlNzE3ZjlhYzU0NzM2OWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDU4NGE2NWQ3ZGE0NGJjY2E2YzYzODEwMmIxMDI3ZWEgPSAkKCc8ZGl2IGlkPSJodG1sXzA1ODRhNjVkN2RhNDRiY2NhNmM2MzgxMDJiMTAyN2VhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxsaWFtc2JyaWRnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVmY2FhN2MxODlkNDY1Y2FlNzE3ZjlhYzU0NzM2OWIuc2V0Q29udGVudChodG1sXzA1ODRhNjVkN2RhNDRiY2NhNmM2MzgxMDJiMTAyN2VhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5OTllMmQzZDE3NDQ0N2ViZDBhZDFjZWRhMjk4MWY4LmJpbmRQb3B1cChwb3B1cF9hNWZjYWE3YzE4OWQ0NjVjYWU3MTdmOWFjNTQ3MzY5Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGJmMjUyMjgzYTY0ZTUyYWRjNjFhYTY2MjM1Y2QwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg2Njg1ODEwNzI1MjY5NiwtNzMuODM1Nzk3NTk4MDgxMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZkNWM0ZGRiZDY5NGNjYmJiN2Y4ZTA0NzVlNDBhNDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmFkNTEzOTUzYTVlNGEzNDg4ZGMxN2UxMmIwYWQ0MjAgPSAkKCc8ZGl2IGlkPSJodG1sXzJhZDUxMzk1M2E1ZTRhMzQ4OGRjMTdlMTJiMGFkNDIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXljaGVzdGVyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmQ1YzRkZGJkNjk0Y2NiYmI3ZjhlMDQ3NWU0MGE0MC5zZXRDb250ZW50KGh0bWxfMmFkNTEzOTUzYTVlNGEzNDg4ZGMxN2UxMmIwYWQ0MjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmRiZjI1MjI4M2E2NGU1MmFkYzYxYWE2NjIzNWNkMDcuYmluZFBvcHVwKHBvcHVwXzY2ZDVjNGRkYmQ2OTRjY2JiYjdmOGUwNDc1ZTQwYTQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3MjA5MzljNjUzNDRmNDliNTFkOGM0MmNiMGE5N2IxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODU3NDEzNDk4MDg4NjUsLTczLjg1NDc1NTY0MDE3OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwMjk2MDA3MGZjOTQ2NzE5NGM2MjgyNWFkODg1MTBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3ZWQyZjljMDUzMzRjNzU5ZTBlZjkxZjU2NDFlY2VmID0gJCgnPGRpdiBpZD0iaHRtbF9iN2VkMmY5YzA1MzM0Yzc1OWUwZWY5MWY1NjQxZWNlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVsaGFtIFBhcmt3YXk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwMjk2MDA3MGZjOTQ2NzE5NGM2MjgyNWFkODg1MTBiLnNldENvbnRlbnQoaHRtbF9iN2VkMmY5YzA1MzM0Yzc1OWUwZWY5MWY1NjQxZWNlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNzIwOTM5YzY1MzQ0ZjQ5YjUxZDhjNDJjYjBhOTdiMS5iaW5kUG9wdXAocG9wdXBfZjAyOTYwMDcwZmM5NDY3MTk0YzYyODI1YWQ4ODUxMGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTY5YjBiYWVkNzlmNGJhYmEwMjQ2MmQwOWE1ZWIxZmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDcyNDY3MDQ5MTgxMywtNzMuNzg2NDg4NDUyNjc0MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTUyMzhlYTgzNzAwNGYyOGJiZjUyYjBiOWNmNDJkODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWVmMWRiNzIxYjE4NGY1NTljM2NiN2E0YTBiMDdmMzUgPSAkKCc8ZGl2IGlkPSJodG1sX2VlZjFkYjcyMWIxODRmNTU5YzNjYjdhNGEwYjA3ZjM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaXR5IElzbGFuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUyMzhlYTgzNzAwNGYyOGJiZjUyYjBiOWNmNDJkODAuc2V0Q29udGVudChodG1sX2VlZjFkYjcyMWIxODRmNTU5YzNjYjdhNGEwYjA3ZjM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk2OWIwYmFlZDc5ZjRiYWJhMDI0NjJkMDlhNWViMWZiLmJpbmRQb3B1cChwb3B1cF9hNTIzOGVhODM3MDA0ZjI4YmJmNTJiMGI5Y2Y0MmQ4MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Y2I2NDIzZDU5YTA0MjE4OWVhNzM1OWUzZDgwNWQzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3MDE4NTE2NDk3NTMyNSwtNzMuODg1NTEyMTg0MTkxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYjBjNTUxNDcxY2U0MzViYmQxMDU1OTYzNjUyYmVlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDFhN2YzZjVkNzg0ODNkOWVmYjUxNGM4ZmFmNTQ0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjAxYTdmM2Y1ZDc4NDgzZDllZmI1MTRjOGZhZjU0NDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlZGZvcmQgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmIwYzU1MTQ3MWNlNDM1YmJkMTA1NTk2MzY1MmJlZWYuc2V0Q29udGVudChodG1sXzIwMWE3ZjNmNWQ3ODQ4M2Q5ZWZiNTE0YzhmYWY1NDQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhjYjY0MjNkNTlhMDQyMTg5ZWE3MzU5ZTNkODA1ZDNlLmJpbmRQb3B1cChwb3B1cF9iYjBjNTUxNDcxY2U0MzViYmQxMDU1OTYzNjUyYmVlZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNmRhM2I1M2ZjM2U0MTNlYjU3NzlmZWZhMmMyZWVkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg1NTcyNzA3NzE5NjY0LC03My45MTA0MTU5NjE5MTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiNDBjNzFjNjY3NzQ2OTg5MDYyM2E0NTQxM2FjZjBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmYmNmM2ZhZTU2MDQzY2M5YTZkN2E0YWY2NjgyNTQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9jZmJjZjNmYWU1NjA0M2NjOWE2ZDdhNGFmNjY4MjU0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VW5pdmVyc2l0eSBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjQwYzcxYzY2Nzc0Njk4OTA2MjNhNDU0MTNhY2YwZi5zZXRDb250ZW50KGh0bWxfY2ZiY2YzZmFlNTYwNDNjYzlhNmQ3YTRhZjY2ODI1NDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjZkYTNiNTNmYzNlNDEzZWI1Nzc5ZmVmYTJjMmVlZGYuYmluZFBvcHVwKHBvcHVwX2JiNDBjNzFjNjY3NzQ2OTg5MDYyM2E0NTQxM2FjZjBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1M2JiNmViZWM4NjQwMWY5MzYyYzkzZjQ3MDQzMTkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQ3ODk3OTI2MDYyNzEsLTczLjkxOTY3MTU5MTE5NTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhZjU4ZmU3ZjljMDRkMjc4ZTQ5Mjg1ZjdjOTkxODk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU1NjNiYjhlZWI0ZTQ5MTE4MTk0MWU4N2ViNTcwM2ZiID0gJCgnPGRpdiBpZD0iaHRtbF81NTYzYmI4ZWViNGU0OTExODE5NDFlODdlYjU3MDNmYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9ycmlzIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhZjU4ZmU3ZjljMDRkMjc4ZTQ5Mjg1ZjdjOTkxODk4LnNldENvbnRlbnQoaHRtbF81NTYzYmI4ZWViNGU0OTExODE5NDFlODdlYjU3MDNmYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNTNiYjZlYmVjODY0MDFmOTM2MmM5M2Y0NzA0MzE5My5iaW5kUG9wdXAocG9wdXBfMWFmNThmZTdmOWMwNGQyNzhlNDkyODVmN2M5OTE4OTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjhiNDFmYmRmYjliNGJmYWE0NWFlMjFjMzBlYWM5MTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NjA5OTY3OTYzODY1NCwtNzMuODk2NDI2NTU5ODE2MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWExNDExMGY5ZjhhNDQxYjg5YmQ5MmQzNmZmZjNkZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZkZGJjOGMxOGQwNDgzMWFmMjAwZjExNDA1ZTZjNjEgPSAkKCc8ZGl2IGlkPSJodG1sXzdmZGRiYzhjMThkMDQ4MzFhZjIwMGYxMTQwNWU2YzYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gb3JkaGFtPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YTE0MTEwZjlmOGE0NDFiODliZDkyZDM2ZmZmM2RmYi5zZXRDb250ZW50KGh0bWxfN2ZkZGJjOGMxOGQwNDgzMWFmMjAwZjExNDA1ZTZjNjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhiNDFmYmRmYjliNGJmYWE0NWFlMjFjMzBlYWM5MTguYmluZFBvcHVwKHBvcHVwXzVhMTQxMTBmOWY4YTQ0MWI4OWJkOTJkMzZmZmYzZGZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwMTk4M2YyYTVlODRiMWI4Y2YyZTVhOWIxYjMzY2VlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQyNjk2MTU3ODYwNTMsLTczLjg4NzM1NjE3NTMyMzM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjNTI0YTMxM2Y1NjQ2OGE4MTEyM2I1ZjRiOWEyYjU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5YjFlMjViOWM5NTRhZWNiNGFkNTIyZGMzNzIyZWExID0gJCgnPGRpdiBpZD0iaHRtbF9mOWIxZTI1YjljOTU0YWVjYjRhZDUyMmRjMzcyMmVhMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBUcmVtb250PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzUyNGEzMTNmNTY0NjhhODExMjNiNWY0YjlhMmI1OC5zZXRDb250ZW50KGh0bWxfZjliMWUyNWI5Yzk1NGFlY2I0YWQ1MjJkYzM3MjJlYTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTAxOTgzZjJhNWU4NGIxYjhjZjJlNWE5YjFiMzNjZWUuYmluZFBvcHVwKHBvcHVwXzJjNTI0YTMxM2Y1NjQ2OGE4MTEyM2I1ZjRiOWEyYjU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5MDE0ZWViY2UzNjQzZTZhNjc2ZmZkMDdlNzVlYjBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODM5NDc1MDU2NzI2NTMsLTczLjg3Nzc0NDc0OTEwNTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0MGJkZTFkYjU1YjQzZjY4OWU4ZmVjOTE1MDg2ZGMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmOGI0YTMzOGM0NzQ1MGVhZWRkNzg1NDg5NjU4NDc2ID0gJCgnPGRpdiBpZD0iaHRtbF81ZjhiNGEzMzhjNDc0NTBlYWVkZDc4NTQ4OTY1ODQ3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdCBGYXJtczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQwYmRlMWRiNTViNDNmNjg5ZThmZWM5MTUwODZkYzIuc2V0Q29udGVudChodG1sXzVmOGI0YTMzOGM0NzQ1MGVhZWRkNzg1NDg5NjU4NDc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg5MDE0ZWViY2UzNjQzZTZhNjc2ZmZkMDdlNzVlYjBkLmJpbmRQb3B1cChwb3B1cF82NDBiZGUxZGI1NWI0M2Y2ODllOGZlYzkxNTA4NmRjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNGUxNGJhOGJjODc0MTZkYmFiMDUxOTZmN2EwZTBiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgzNjYyMzAxMDcwNjA1NiwtNzMuOTI2MTAyMDkzNTgxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YzQ2OWU4YTI5ODM0ZmQ3OWNhMzIxNDcwMDk2NTVlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTVhMTI4NTg0M2E0NTI4OWVhNDIzYTRmZjM4M2JmMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTU1YTEyODU4NDNhNDUyODllYTQyM2E0ZmYzODNiZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhpZ2ggIEJyaWRnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM0NjllOGEyOTgzNGZkNzljYTMyMTQ3MDA5NjU1ZTAuc2V0Q29udGVudChodG1sXzE1NWExMjg1ODQzYTQ1Mjg5ZWE0MjNhNGZmMzgzYmYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0ZTE0YmE4YmM4NzQxNmRiYWIwNTE5NmY3YTBlMGI0LmJpbmRQb3B1cChwb3B1cF80YzQ2OWU4YTI5ODM0ZmQ3OWNhMzIxNDcwMDk2NTVlMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yODUwNWMyZWY4YTk0M2NmYjVjZGFhY2RiM2FlMjgzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxOTc1NDM3MDU5NDkzNiwtNzMuOTA5NDIxNjA3NTc0MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDIzZjM0NWUwOGFmNDZlMmI1ODVlOTEwNWE3YjU0ZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjY3OWE5N2ViZGRiNDVkZWEwZmM2OGQ3YjdiODQwMTggPSAkKCc8ZGl2IGlkPSJodG1sX2I2NzlhOTdlYmRkYjQ1ZGVhMGZjNjhkN2I3Yjg0MDE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZWxyb3NlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMjNmMzQ1ZTA4YWY0NmUyYjU4NWU5MTA1YTdiNTRkZi5zZXRDb250ZW50KGh0bWxfYjY3OWE5N2ViZGRiNDVkZWEwZmM2OGQ3YjdiODQwMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjg1MDVjMmVmOGE5NDNjZmI1Y2RhYWNkYjNhZTI4MzAuYmluZFBvcHVwKHBvcHVwX2QyM2YzNDVlMDhhZjQ2ZTJiNTg1ZTkxMDVhN2I1NGRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiOGYxOGViZTA2NjRiYTBiNWI3Y2E1NDU5NjEyOTFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA2MjM4NzQ5MzUxNzcsLTczLjkxNjA5OTg3NDg3NTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiN2M1ODBjOWQ2ZTQ4ZTdhZTFhYWY3OThjZGZkNWI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3NDM2ZWM1MGQwZDRhZTk4YzJlMzVkNDllNjk4ZjgwID0gJCgnPGRpdiBpZD0iaHRtbF85NzQzNmVjNTBkMGQ0YWU5OGMyZTM1ZDQ5ZTY5OGY4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW90dCBIYXZlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2I3YzU4MGM5ZDZlNDhlN2FlMWFhZjc5OGNkZmQ1YjUuc2V0Q29udGVudChodG1sXzk3NDM2ZWM1MGQwZDRhZTk4YzJlMzVkNDllNjk4ZjgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRiOGYxOGViZTA2NjRiYTBiNWI3Y2E1NDU5NjEyOTFjLmJpbmRQb3B1cChwb3B1cF83YjdjNTgwYzlkNmU0OGU3YWUxYWFmNzk4Y2RmZDViNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNWNmMGJhNDhiMmE0NGY2YTAyZGZmMWNlZTNkZTNhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwMTY2MzYyNzc1NjIwNiwtNzMuOTEzMjIxMzkzODYxMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM1ZjJjM2NhN2EwNDBkN2I5OTc5OGNiZDlhYjdmMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjdmYjc5NGYwYmZmNDU5ZTlhZmMyZGZmY2U4NjM4NjAgPSAkKCc8ZGl2IGlkPSJodG1sXzY3ZmI3OTRmMGJmZjQ1OWU5YWZjMmRmZmNlODYzODYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qb3J0IE1vcnJpczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjM1ZjJjM2NhN2EwNDBkN2I5OTc5OGNiZDlhYjdmMTIuc2V0Q29udGVudChodG1sXzY3ZmI3OTRmMGJmZjQ1OWU5YWZjMmRmZmNlODYzODYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE1Y2YwYmE0OGIyYTQ0ZjZhMDJkZmYxY2VlM2RlM2EzLmJpbmRQb3B1cChwb3B1cF9mMzVmMmMzY2E3YTA0MGQ3Yjk5Nzk4Y2JkOWFiN2YxMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOWQwZDc2MWM0MDM0YTIwYjI3ODc0Y2M5ZDQ1YWI2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgxNTA5OTA0NTQ1ODIyLC03My44OTU3ODgyMDA5NDQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzZmZkZGJlYmZiNjQ5NjZiNGMzMDYwMDI5NmMyZjcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5ZmMzMTA1ZDljMTQ5ZWNiNjk0YmI0Zjk2NjIwNTg3ID0gJCgnPGRpdiBpZD0iaHRtbF8yOWZjMzEwNWQ5YzE0OWVjYjY5NGJiNGY5NjYyMDU4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG9uZ3dvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzZmZkZGJlYmZiNjQ5NjZiNGMzMDYwMDI5NmMyZjcxLnNldENvbnRlbnQoaHRtbF8yOWZjMzEwNWQ5YzE0OWVjYjY5NGJiNGY5NjYyMDU4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOWQwZDc2MWM0MDM0YTIwYjI3ODc0Y2M5ZDQ1YWI2ZC5iaW5kUG9wdXAocG9wdXBfZjNmZmRkYmViZmI2NDk2NmI0YzMwNjAwMjk2YzJmNzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQ0YWViY2E1ZDEwNGRhNzgyNDBkYjQ5OWU1MTU1ZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDk3Mjk4NzkzODcwOSwtNzMuODgzMzE1MDU5NTUyOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmE2YjIyNDNlM2Q5NGJkNjhiZGM5YjZmODc2MGVjNTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA5ZTliOTY2NWFjNGI1YjgzYWQ1ZGRhZTBhMDgyYjAgPSAkKCc8ZGl2IGlkPSJodG1sX2UwOWU5Yjk2NjVhYzRiNWI4M2FkNWRkYWUwYTA4MmIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdW50cyBQb2ludDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmE2YjIyNDNlM2Q5NGJkNjhiZGM5YjZmODc2MGVjNTQuc2V0Q29udGVudChodG1sX2UwOWU5Yjk2NjVhYzRiNWI4M2FkNWRkYWUwYTA4MmIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q0NGFlYmNhNWQxMDRkYTc4MjQwZGI0OTllNTE1NWQ5LmJpbmRQb3B1cChwb3B1cF9mYTZiMjI0M2UzZDk0YmQ2OGJkYzliNmY4NzYwZWM1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzM4ZGJhNTlmZjY0NDc4YjcyNzJjMGVmMWVhMmViYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgyMzU5MTk4NTg1NTM0LC03My45MDE1MDY0ODk0MzA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MDgzODMxYTg1ZmM0NjY2ODk1OTFiMzA1ODU0YTRmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTM4ZmUxNmMxZDk0Mjg4ODYwNjU4NTA5ZWFiNmUzZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjUzOGZlMTZjMWQ5NDI4ODg2MDY1ODUwOWVhYjZlM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vcnJpc2FuaWE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwODM4MzFhODVmYzQ2NjY4OTU5MWIzMDU4NTRhNGZkLnNldENvbnRlbnQoaHRtbF9mNTM4ZmUxNmMxZDk0Mjg4ODYwNjU4NTA5ZWFiNmUzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMzM4ZGJhNTlmZjY0NDc4YjcyNzJjMGVmMWVhMmViYi5iaW5kUG9wdXAocG9wdXBfNTA4MzgzMWE4NWZjNDY2Njg5NTkxYjMwNTg1NGE0ZmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmI4YmQwMWRhZTIyNGJhZWEyNjg4MzA4NTdiNTY3MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjEwMTIxOTc5MTQwMTUsLTczLjg2NTc0NjA5NTU0OTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViZTYyMjk0MjJlMDQwMTg4MzNmYjZiMzg1ZmI2OGUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3MzQ2YTZlYjUyMjQ1ZWI5NWE5NTdmY2I4ZGMzODliID0gJCgnPGRpdiBpZD0iaHRtbF8zNzM0NmE2ZWI1MjI0NWViOTVhOTU3ZmNiOGRjMzg5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291bmR2aWV3PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YmU2MjI5NDIyZTA0MDE4ODMzZmI2YjM4NWZiNjhlMS5zZXRDb250ZW50KGh0bWxfMzczNDZhNmViNTIyNDVlYjk1YTk1N2ZjYjhkYzM4OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmI4YmQwMWRhZTIyNGJhZWEyNjg4MzA4NTdiNTY3MGIuYmluZFBvcHVwKHBvcHVwXzViZTYyMjk0MjJlMDQwMTg4MzNmYjZiMzg1ZmI2OGUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiNzU1ODA5MjQwZjRkZGQ4YjdkZjBhYjdjZDk2NzdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA2NTUxMTIwMDM1ODksLTczLjg1NDE0NDE2MTg5MjY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2YjhmNDEwZWJhZjQwODViZTEyOGE2ZTQ4MGI5MjhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2N2UzNjQzMzU0YzQ1ZWRhOGQzYmI3YWFjOTI2ZmE4ID0gJCgnPGRpdiBpZD0iaHRtbF9jNjdlMzY0MzM1NGM0NWVkYThkM2JiN2FhYzkyNmZhOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xhc29uIFBvaW50PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NmI4ZjQxMGViYWY0MDg1YmUxMjhhNmU0ODBiOTI4YS5zZXRDb250ZW50KGh0bWxfYzY3ZTM2NDMzNTRjNDVlZGE4ZDNiYjdhYWM5MjZmYTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2I3NTU4MDkyNDBmNGRkZDhiN2RmMGFiN2NkOTY3N2MuYmluZFBvcHVwKHBvcHVwXzg2YjhmNDEwZWJhZjQwODViZTEyOGE2ZTQ4MGI5MjhhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjMDM4ZWEyMDU2ZTQ1NDBhZjkxMDFlNWVmYjI4NDBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE1MTA5MjU4MDQwMDUsLTczLjgxNjM1MDAyMTU4NDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MzdkODg0ZmQ5NzRkNGRiNzk4ODcxOTkwNWMyYjhkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhMWYxMWEwYjdlOTQ1NWFhNWExODM4NTkxZGQ5NWJlID0gJCgnPGRpdiBpZD0iaHRtbF8yYTFmMTFhMGI3ZTk0NTVhYTVhMTgzODU5MWRkOTViZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhyb2dzIE5lY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4MzdkODg0ZmQ5NzRkNGRiNzk4ODcxOTkwNWMyYjhkLnNldENvbnRlbnQoaHRtbF8yYTFmMTFhMGI3ZTk0NTVhYTVhMTgzODU5MWRkOTViZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YzAzOGVhMjA1NmU0NTQwYWY5MTAxZTVlZmIyODQwYy5iaW5kUG9wdXAocG9wdXBfMjgzN2Q4ODRmZDk3NGQ0ZGI3OTg4NzE5OTA1YzJiOGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWY0MjkwMDg0OGVlNGRkYWE2NDA3NWViYTQ5OWJhOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDQyNDU5MzY5NDczNzQsLTczLjgyNDA5OTI2NzUzODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjUxZTM5YzgwYWZkNDhmZGJkZjc4MzI5NWY5MmIzYzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjVkZDk2OGZkNjIyNGVjZWE1M2U3MjZiNjJlM2JmYTQgPSAkKCc8ZGl2IGlkPSJodG1sX2I1ZGQ5NjhmZDYyMjRlY2VhNTNlNzI2YjYyZTNiZmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db3VudHJ5IENsdWI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1MWUzOWM4MGFmZDQ4ZmRiZGY3ODMyOTVmOTJiM2MyLnNldENvbnRlbnQoaHRtbF9iNWRkOTY4ZmQ2MjI0ZWNlYTUzZTcyNmI2MmUzYmZhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjQyOTAwODQ4ZWU0ZGRhYTY0MDc1ZWJhNDk5YmE5Yy5iaW5kUG9wdXAocG9wdXBfZjUxZTM5YzgwYWZkNDhmZGJkZjc4MzI5NWY5MmIzYzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNhZWZiNjk3NjE0NDQ3Njk3NzRjYjU1ZDFkNWNhM2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Mzc5Mzc4MjIyNjcyODYsLTczLjg1NjAwMzEwNTM1NzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk2NTQ5ZTkwYTVmMzRkOTJiZWY5YzM4ZmM5Mjk3NDMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmYTZiNThhYmQzMzQxYzM4ZGIxNjA5Y2M3MThiODBlID0gJCgnPGRpdiBpZD0iaHRtbF85ZmE2YjU4YWJkMzM0MWMzOGRiMTYwOWNjNzE4YjgwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFya2NoZXN0ZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2NTQ5ZTkwYTVmMzRkOTJiZWY5YzM4ZmM5Mjk3NDMxLnNldENvbnRlbnQoaHRtbF85ZmE2YjU4YWJkMzM0MWMzOGRiMTYwOWNjNzE4YjgwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85M2FlZmI2OTc2MTQ0NDc2OTc3NGNiNTVkMWQ1Y2EzZi5iaW5kUG9wdXAocG9wdXBfOTY1NDllOTBhNWYzNGQ5MmJlZjljMzhmYzkyOTc0MzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQyM2YzMjQyZWRhNDQzNWFkM2M0NzdlOWUxYzU2MzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDA2MTk0OTY0MzI3LC03My44NDIxOTQwNzYwNDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTdjODExMDAyNjI0Y2E5OWFlZWMyNjI3YmI5NTFmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYjRlYjA5ZDI3Yzg0YmVkOTk2MWE1ZDY1OTliNTg1ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2I0ZWIwOWQyN2M4NGJlZDk5NjFhNWQ2NTk5YjU4NWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3RjaGVzdGVyIFNxdWFyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E3YzgxMTAwMjYyNGNhOTlhZWVjMjYyN2JiOTUxZmMuc2V0Q29udGVudChodG1sXzNiNGViMDlkMjdjODRiZWQ5OTYxYTVkNjU5OWI1ODVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y0MjNmMzI0MmVkYTQ0MzVhZDNjNDc3ZTllMWM1NjM1LmJpbmRQb3B1cChwb3B1cF83YTdjODExMDAyNjI0Y2E5OWFlZWMyNjI3YmI5NTFmYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjhhOTZlNDYxZjE0NWYzODRiZDVkNWY1OWU4YTE1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0MzYwODQ3MTI0NzE4LC03My44NjYyOTkxODA3NTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0NGRhNGY1OTMwYjRlYjQ4ZmNkZjYxMTI3ZjNjMjI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwMjZlZTQ0ZDhkZTQwYjlhMGZkYmYxNmFmYTI3OTYyID0gJCgnPGRpdiBpZD0iaHRtbF80MDI2ZWU0NGQ4ZGU0MGI5YTBmZGJmMTZhZmEyNzk2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE5lc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0NGRhNGY1OTMwYjRlYjQ4ZmNkZjYxMTI3ZjNjMjI0LnNldENvbnRlbnQoaHRtbF80MDI2ZWU0NGQ4ZGU0MGI5YTBmZGJmMTZhZmEyNzk2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NjhhOTZlNDYxZjE0NWYzODRiZDVkNWY1OWU4YTE1MS5iaW5kUG9wdXAocG9wdXBfOTQ0ZGE0ZjU5MzBiNGViNDhmY2RmNjExMjdmM2MyMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTIxOTQzNDE4Zjc1NDI4Mjg2NDljMWY3YTgzODVhODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NDc1NDkwNjM1MzYzMzQsLTczLjg1MDQwMTc4MDMwNDIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzOWMwOGJiYTY5YjQwM2U5MTk4YWQ1YTY3ZGE3YzcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiY2Q1MDA1NTkxODRhMzE4Y2MxYTExNjgxMjlhNDlkID0gJCgnPGRpdiBpZD0iaHRtbF9iYmNkNTAwNTU5MTg0YTMxOGNjMWExMTY4MTI5YTQ5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9ycmlzIFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzOWMwOGJiYTY5YjQwM2U5MTk4YWQ1YTY3ZGE3YzcyLnNldENvbnRlbnQoaHRtbF9iYmNkNTAwNTU5MTg0YTMxOGNjMWExMTY4MTI5YTQ5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMjE5NDM0MThmNzU0MjgyODY0OWMxZjdhODM4NWE4My5iaW5kUG9wdXAocG9wdXBfMDM5YzA4YmJhNjliNDAzZTkxOThhZDVhNjdkYTdjNzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGZhNzJkNzQ2NGZkNGU5ZTllOWEzOTMxZTU5NzBhYWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTcyNzcxMDA3Mzg5NSwtNzMuODg4NDUxOTYxMzQ4MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmM0ZmRhMGUzNzFhNDVhNDkzMjhiMjc1ZTA2ZDRmNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGQ0ODYzYWUyYjI4NGNiZGE5ZDIzODk5ZjY5NjE3YTggPSAkKCc8ZGl2IGlkPSJodG1sX2RkNDg2M2FlMmIyODRjYmRhOWQyMzg5OWY2OTYxN2E4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWxtb250PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzRmZGEwZTM3MWE0NWE0OTMyOGIyNzVlMDZkNGY1OC5zZXRDb250ZW50KGh0bWxfZGQ0ODYzYWUyYjI4NGNiZGE5ZDIzODk5ZjY5NjE3YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGZhNzJkNzQ2NGZkNGU5ZTllOWEzOTMxZTU5NzBhYWQuYmluZFBvcHVwKHBvcHVwX2JjNGZkYTBlMzcxYTQ1YTQ5MzI4YjI3NWUwNmQ0ZjU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwOWFmNGEzYjg3ZTQ5ZGFhN2MyOGU1OGY4NmI5NTI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODgxMzk0OTc3MjcwODYsLTczLjkxNzE5MDQ4MjEwMzkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzMzMwZGMyYTE3ZDQ1NWM4ZDZkNzkwZWRmNzIyNjMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1MDA4YTBmNTA4MzQxMDJiY2E1NDg3MjBlYjAwZDZkID0gJCgnPGRpdiBpZD0iaHRtbF9kNTAwOGEwZjUwODM0MTAyYmNhNTQ4NzIwZWIwMGQ2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3B1eXRlbiBEdXl2aWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzMzMwZGMyYTE3ZDQ1NWM4ZDZkNzkwZWRmNzIyNjMxLnNldENvbnRlbnQoaHRtbF9kNTAwOGEwZjUwODM0MTAyYmNhNTQ4NzIwZWIwMGQ2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDlhZjRhM2I4N2U0OWRhYTdjMjhlNThmODZiOTUyNi5iaW5kUG9wdXAocG9wdXBfZTMzMzBkYzJhMTdkNDU1YzhkNmQ3OTBlZGY3MjI2MzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODg2NjAyNTYyZjRhNGUxMDgwYjk1NmRkMTcwNmExN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC45MDg1NDI4Mjk1MDY2NiwtNzMuOTA0NTMwNTQ5MDg5MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ5NzRjYzRhNGRhNGFmZWI3MTNlY2ZmOGQ3ZDcwMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzRmZTVhYjkzNDYyNDhkYWI2YjBiNzRlMTk1NGI5NTcgPSAkKCc8ZGl2IGlkPSJodG1sXzM0ZmU1YWI5MzQ2MjQ4ZGFiNmIwYjc0ZTE5NTRiOTU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aCBSaXZlcmRhbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0OTc0Y2M0YTRkYTRhZmViNzEzZWNmZjhkN2Q3MDAxLnNldENvbnRlbnQoaHRtbF8zNGZlNWFiOTM0NjI0OGRhYjZiMGI3NGUxOTU0Yjk1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODY2MDI1NjJmNGE0ZTEwODBiOTU2ZGQxNzA2YTE3ZS5iaW5kUG9wdXAocG9wdXBfOTQ5NzRjYzRhNGRhNGFmZWI3MTNlY2ZmOGQ3ZDcwMDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzZlODhkMjU0MTg4NDM1ZTkwNDQ0NTNkODE5OTQ4ZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTA2NDE0MDk0MDMzNSwtNzMuODMyMDczNzgyNDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTc0ZTA4ZmE0NmM0NTM1YTQyMTgwMTc5ZjhjNzY5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Nzc0MzJiZThkZmI0Y2M5Yjk1ZjM5ZjIzMmJhODc2YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzc3NDMyYmU4ZGZiNGNjOWI5NWYzOWYyMzJiYTg3NmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlbGhhbSBCYXk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNzRlMDhmYTQ2YzQ1MzVhNDIxODAxNzlmOGM3Njk5LnNldENvbnRlbnQoaHRtbF83Nzc0MzJiZThkZmI0Y2M5Yjk1ZjM5ZjIzMmJhODc2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNmU4OGQyNTQxODg0MzVlOTA0NDQ1M2Q4MTk5NDhkZS5iaW5kUG9wdXAocG9wdXBfMjE3NGUwOGZhNDZjNDUzNWE0MjE4MDE3OWY4Yzc2OTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGUyZjQxZDZlM2YyNGRiMGI2NDY3MzY4ZWJmYTUxYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MjY1Nzk1MTY4NjkyMiwtNzMuODI2MjAyNzU5OTQwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY0OGZiNTAzOGQ4NDRiYzg4NDg4NWQxMjJkODJmOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjNhZWRhNWMzNmM0NDZhZTgxYWNjZGZmY2E5YTlhNWEgPSAkKCc8ZGl2IGlkPSJodG1sXzIzYWVkYTVjMzZjNDQ2YWU4MWFjY2RmZmNhOWE5YTVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TY2h1eWxlcnZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjQ4ZmI1MDM4ZDg0NGJjODg0ODg1ZDEyMmQ4MmY5Ni5zZXRDb250ZW50KGh0bWxfMjNhZWRhNWMzNmM0NDZhZTgxYWNjZGZmY2E5YTlhNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGUyZjQxZDZlM2YyNGRiMGI2NDY3MzY4ZWJmYTUxYTYuYmluZFBvcHVwKHBvcHVwXzg2NDhmYjUwMzhkODQ0YmM4ODQ4ODVkMTIyZDgyZjk2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5MGE4YjAzYjk3OTQyNjFiNDg5ODI1NjhjMTU0ZWE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODIxOTg2MTE4MTYzNDk0LC03My44MTM4ODUxNDQyODYxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MTY5MmZiNGI2MjY0OTYzYjYyZjkxMGNiNjZhOTM3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODU1MTA4NmEwYTU0NjNiOTE3ZmM4N2JiNGI0MjA0ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjg1NTEwODZhMGE1NDYzYjkxN2ZjODdiYjRiNDIwNGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVkZ2V3YXRlciBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTY5MmZiNGI2MjY0OTYzYjYyZjkxMGNiNjZhOTM3OC5zZXRDb250ZW50KGh0bWxfMjg1NTEwODZhMGE1NDYzYjkxN2ZjODdiYjRiNDIwNGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDkwYThiMDNiOTc5NDI2MWI0ODk4MjU2OGMxNTRlYTQuYmluZFBvcHVwKHBvcHVwXzYxNjkyZmI0YjYyNjQ5NjNiNjJmOTEwY2I2NmE5Mzc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4OGFmNGVmOTM5YzQ0MTE4ZGMwYTExNDM3MmRlYTIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODE5MDE0Mzc2OTg4MzE0LC03My44NDgwMjcyOTU4MjczNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDNjMTQxMzkwMjI0NmYxYjk0YzE2NzlhNmIzN2ZiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTRlYmFiMjdjZWU0NzAwYjZhYjNkZGY0NjkxNjExMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzU0ZWJhYjI3Y2VlNDcwMGI2YWIzZGRmNDY5MTYxMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhc3RsZSBIaWxsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDNjMTQxMzkwMjI0NmYxYjk0YzE2NzlhNmIzN2ZiYi5zZXRDb250ZW50KGh0bWxfMzU0ZWJhYjI3Y2VlNDcwMGI2YWIzZGRmNDY5MTYxMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDg4YWY0ZWY5MzljNDQxMThkYzBhMTE0MzcyZGVhMjMuYmluZFBvcHVwKHBvcHVwXzZkM2MxNDEzOTAyMjQ2ZjFiOTRjMTY3OWE2YjM3ZmJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4MmRmMjliOGM3NzQ5MTY4MTlmNDkxODVjYzBiNjIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODcxMzcwNzgxOTIzNzEsLTczLjg2MzMyMzYxNjUyNzc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiMWMzOWZmM2U5ZDQ2Nzc4MjBmNzdiNzIxODc5YTY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjMDM5NzM1NzZhYjQ2MjRiZDkwZDM4ODU1NGQ2MDU2ID0gJCgnPGRpdiBpZD0iaHRtbF9hYzAzOTczNTc2YWI0NjI0YmQ5MGQzODg1NTRkNjA1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2xpbnZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjFjMzlmZjNlOWQ0Njc3ODIwZjc3YjcyMTg3OWE2NS5zZXRDb250ZW50KGh0bWxfYWMwMzk3MzU3NmFiNDYyNGJkOTBkMzg4NTU0ZDYwNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTgyZGYyOWI4Yzc3NDkxNjgxOWY0OTE4NWNjMGI2MjMuYmluZFBvcHVwKHBvcHVwX2ZiMWMzOWZmM2U5ZDQ2Nzc4MjBmNzdiNzIxODc5YTY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxY2M0ODdkZmUyZDRiODE4N2NmYWJjZDJjZDVjOTE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODYyOTY1NjI0Nzc5OTgsLTczLjg0MTYxMTk0ODMxMjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhNThkMTc3NzJmNTQyZmQ4OWE3M2NlMzU1MGFiNDg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmOWYyMzgwNWZlMDRlYTg5YWYyNGVjYTk2MGZlZDBhID0gJCgnPGRpdiBpZD0iaHRtbF8yZjlmMjM4MDVmZTA0ZWE4OWFmMjRlY2E5NjBmZWQwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVsaGFtIEdhcmRlbnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhNThkMTc3NzJmNTQyZmQ4OWE3M2NlMzU1MGFiNDg2LnNldENvbnRlbnQoaHRtbF8yZjlmMjM4MDVmZTA0ZWE4OWFmMjRlY2E5NjBmZWQwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMWNjNDg3ZGZlMmQ0YjgxODdjZmFiY2QyY2Q1YzkxNS5iaW5kUG9wdXAocG9wdXBfMmE1OGQxNzc3MmY1NDJmZDg5YTczY2UzNTUwYWI0ODYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFmYTc1NWYwNjkyNDFjNGJlYjljZDlhMDE1OGU0YmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MzQyODM4MDczMzg1MSwtNzMuOTE1NTg5NDE3NzM0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZmODdjZjIwOWMyNGU0MGFlZjdmMGVhMDVkZWZmODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjY3NDhiYWMzODUwNGI0YWEwNmFmNGIwYWJlN2JjMTggPSAkKCc8ZGl2IGlkPSJodG1sX2Y2NzQ4YmFjMzg1MDRiNGFhMDZhZjRiMGFiZTdiYzE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25jb3Vyc2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmZjg3Y2YyMDljMjRlNDBhZWY3ZjBlYTA1ZGVmZjg0LnNldENvbnRlbnQoaHRtbF9mNjc0OGJhYzM4NTA0YjRhYTA2YWY0YjBhYmU3YmMxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YWZhNzU1ZjA2OTI0MWM0YmViOWNkOWEwMTU4ZTRiZS5iaW5kUG9wdXAocG9wdXBfYWZmODdjZjIwOWMyNGU0MGFlZjdmMGVhMDVkZWZmODQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNmMjcxZmJkYmMzNDhmOWFhOGNjYmZhMWFmMzI0NDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44Mjk3NzQyOTc4NzE2MSwtNzMuODUwNTM1MjQ0NTE5MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmQxODcwZTRiZjhlNGZiYjkzMzk4NzZiNmEzMDliZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTdmM2I2OTU0MWIzNGRhZGI1YTU4MDNkYzhlNGViNmUgPSAkKCc8ZGl2IGlkPSJodG1sX2E3ZjNiNjk1NDFiMzRkYWRiNWE1ODAzZGM4ZTRlYjZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbnBvcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkMTg3MGU0YmY4ZTRmYmI5MzM5ODc2YjZhMzA5YmZhLnNldENvbnRlbnQoaHRtbF9hN2YzYjY5NTQxYjM0ZGFkYjVhNTgwM2RjOGU0ZWI2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jM2YyNzFmYmRiYzM0OGY5YWE4Y2NiZmExYWYzMjQ0Ni5iaW5kUG9wdXAocG9wdXBfMmQxODcwZTRiZjhlNGZiYjkzMzk4NzZiNmEzMDliZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNjYmJhYzRlZDZmNDRlNzllODYyNGIzNmI3MDdlZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44ODQ1NjEzMDMwMzczMiwtNzMuODQ4MDgyNzE4NzcxNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODMyNjczMzg1MTcxNDM5ZDg3YTA1ZWU1MTlmNDZhNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU4ZDY5NTQ3OGZkNDI3Y2E5NzY0ZTk0YjA2Mzc4YjcgPSAkKCc8ZGl2IGlkPSJodG1sXzllOGQ2OTU0NzhmZDQyN2NhOTc2NGU5NGIwNjM3OGI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZGVud2FsZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODMyNjczMzg1MTcxNDM5ZDg3YTA1ZWU1MTlmNDZhNWIuc2V0Q29udGVudChodG1sXzllOGQ2OTU0NzhmZDQyN2NhOTc2NGU5NGIwNjM3OGI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRjY2JiYWM0ZWQ2ZjQ0ZTc5ZTg2MjRiMzZiNzA3ZWU4LmJpbmRQb3B1cChwb3B1cF84MzI2NzMzODUxNzE0MzlkODdhMDVlZTUxOWY0NmE1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzQzNzZiZWFlMDk0ZTFiYjI5ZDVmZTBiNzRiY2RlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgzMTQyODM0MTYxNTQ4LC03My45MDExOTkwMzM4NzY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDMwOWJjOGQ1NjM0ODI0OTM4ZTc2MzQxZTFiYTIwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZGQ0NjVkYzM1NmQ0Mjg0OWE2YWMzYzY4MDU1ZTFmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGRkNDY1ZGMzNTZkNDI4NDlhNmFjM2M2ODA1NWUxZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsYXJlbW9udCBWaWxsYWdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDMwOWJjOGQ1NjM0ODI0OTM4ZTc2MzQxZTFiYTIwMC5zZXRDb250ZW50KGh0bWxfOGRkNDY1ZGMzNTZkNDI4NDlhNmFjM2M2ODA1NWUxZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWM0Mzc2YmVhZTA5NGUxYmIyOWQ1ZmUwYjc0YmNkZTguYmluZFBvcHVwKHBvcHVwXzVkMzA5YmM4ZDU2MzQ4MjQ5MzhlNzYzNDFlMWJhMjAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhYjYwNTY4OWFlYTRhZGU4MzEwZjllODU2Yjg2M2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODI0NzgwNDkwODQyOTA1LC03My45MTU4NDY1Mjc1OTAwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTE3Zjk4MzczMjM0NDhmYTI5NjllMjM0OTE0MmEwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNmExNmIwODUzZWQ0NzYyYTBiZmIwNWVhOTE1OTg4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjZhMTZiMDg1M2VkNDc2MmEwYmZiMDVlYTkxNTk4OGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmNvdXJzZSBWaWxsYWdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTE3Zjk4MzczMjM0NDhmYTI5NjllMjM0OTE0MmEwNi5zZXRDb250ZW50KGh0bWxfZjZhMTZiMDg1M2VkNDc2MmEwYmZiMDVlYTkxNTk4OGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWFiNjA1Njg5YWVhNGFkZTgzMTBmOWU4NTZiODYzZmUuYmluZFBvcHVwKHBvcHVwXzAxMTdmOTgzNzMyMzQ0OGZhMjk2OWUyMzQ5MTQyYTA2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0ZGQ3MWFkZmI5MDQwYzZiMTZhNzkyMTM2ODdmZWVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODQzODI2MTc2NzE2NTQsLTczLjkxNjU1NTUxOTY0NDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiZGQzNWRkYzE2ZjQyZGViM2FiM2I4NzNhZTVhOWQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1ZGExY2E4MGE1ZTQwZWQ4ZWZmNmU5YjgxZGUxNGQ4ID0gJCgnPGRpdiBpZD0iaHRtbF9lNWRhMWNhODBhNWU0MGVkOGVmZjZlOWI4MWRlMTRkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW91bnQgRWRlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJkZDM1ZGRjMTZmNDJkZWIzYWIzYjg3M2FlNWE5ZDcuc2V0Q29udGVudChodG1sX2U1ZGExY2E4MGE1ZTQwZWQ4ZWZmNmU5YjgxZGUxNGQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU0ZGQ3MWFkZmI5MDQwYzZiMTZhNzkyMTM2ODdmZWVmLmJpbmRQb3B1cChwb3B1cF82YmRkMzVkZGMxNmY0MmRlYjNhYjNiODczYWU1YTlkNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDZlZDE4ZWVlZjU0OWU5YmJhMjhmMWI1ZDE5MGRmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg0ODg0MTYwNzI0NjY1LC03My45MDgyOTkzMDg4MTk4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8xMmU4Zjk5MTU2ZGU0NTA0YWI0MmQyMmZjZmNmMzcxMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDU3ZTU1NTgxYzI0NTc5OWIwOTZkMjg5ZGIzOGZkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGRhOWVlMjVmNWQ0MzE4OTM2OTg1Y2NhNWNhZDQ0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjRkYTllZTI1ZjVkNDMxODkzNjk4NWNjYTVjYWQ0NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vdW50IEhvcGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwNTdlNTU1ODFjMjQ1Nzk5YjA5NmQyODlkYjM4ZmQ1LnNldENvbnRlbnQoaHRtbF82NGRhOWVlMjVmNWQ0MzE4OTM2OTg1Y2NhNWNhZDQ0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MDZlZDE4ZWVlZjU0OWU5YmJhMjhmMWI1ZDE5MGRmMi5iaW5kUG9wdXAocG9wdXBfMjA1N2U1NTU4MWMyNDU3OTliMDk2ZDI4OWRiMzhmZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDZjNWE3NzVjYzZlNDYzNzk2ZWZhMWQwOTE3ZmJiM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NTI3MjI5NzYzMzAxNywtNzMuODYxNzI1Nzc1NTUxMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGFiZWI1ZDg2ZmVmNDdhNzhmNGIzNjczNzZlOGVmN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI2YWUyYWEyZmI3NGQ2M2I2ODg3NDNhZWJhMWFlMGYgPSAkKCc8ZGl2IGlkPSJodG1sX2YyNmFlMmFhMmZiNzRkNjNiNjg4NzQzYWViYTFhZTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9ueGRhbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhYmViNWQ4NmZlZjQ3YTc4ZjRiMzY3Mzc2ZThlZjdlLnNldENvbnRlbnQoaHRtbF9mMjZhZTJhYTJmYjc0ZDYzYjY4ODc0M2FlYmExYWUwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNmM1YTc3NWNjNmU0NjM3OTZlZmExZDA5MTdmYmIzYy5iaW5kUG9wdXAocG9wdXBfZGFiZWI1ZDg2ZmVmNDdhNzhmNGIzNjczNzZlOGVmN2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzhiZTBmZThkN2VjNGYxNGIyOTRmZmI5ZTFkZGUxYjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44NjU3ODc4NzgwMjk4MiwtNzMuODU5MzE4NjMyMjE2NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTJlOGY5OTE1NmRlNDUwNGFiNDJkMjJmY2ZjZjM3MTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmViOTM4Mjk3MzUzNDVlMWJmY2FjM2I3NmJhZTQ0MzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTEwNzY0ZTZmNzZlNGM0MzhmZGZmZGU5OTRkODJhYTEgPSAkKCc8ZGl2IGlkPSJodG1sX2UxMDc2NGU2Zjc2ZTRjNDM4ZmRmZmRlOTk0ZDgyYWExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbGxlcnRvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmViOTM4Mjk3MzUzNDVlMWJmY2FjM2I3NmJhZTQ0MzMuc2V0Q29udGVudChodG1sX2UxMDc2NGU2Zjc2ZTRjNDM4ZmRmZmRlOTk0ZDgyYWExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4YmUwZmU4ZDdlYzRmMTRiMjk0ZmZiOWUxZGRlMWIzLmJpbmRQb3B1cChwb3B1cF82ZWI5MzgyOTczNTM0NWUxYmZjYWMzYjc2YmFlNDQzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGEyOWYwY2UzY2M0ZmYyODMxNDY0Y2M4MDdkNjhhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjg3MDM5MjM5MTQxNDcsLTczLjkwMTUyMjY0NTEzMTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzEyZThmOTkxNTZkZTQ1MDRhYjQyZDIyZmNmY2YzNzEwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhNzg3YzNlODFiNDQ4Y2Q5YTIzOTRmNGU5Njk0YmE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1ZTVlMzdjZTZiZDQwMjJiM2RkMzc4MTE5MjJhM2RjID0gJCgnPGRpdiBpZD0iaHRtbF85NWU1ZTM3Y2U2YmQ0MDIyYjNkZDM3ODExOTIyYTNkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2luZ3NicmlkZ2UgSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWE3ODdjM2U4MWI0NDhjZDlhMjM5NGY0ZTk2OTRiYTYuc2V0Q29udGVudChodG1sXzk1ZTVlMzdjZTZiZDQwMjJiM2RkMzc4MTE5MjJhM2RjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0YTI5ZjBjZTNjYzRmZjI4MzE0NjRjYzgwN2Q2OGFmLmJpbmRQb3B1cChwb3B1cF81YTc4N2MzZTgxYjQ0OGNkOWEyMzk0ZjRlOTY5NGJhNik7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f16b59d53c8>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create map of Manhattan using latitude and longitude values\n",
"print_map (bronx_data, zoom=10)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Borough</th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Brooklyn</td>\n",
" <td>Bay Ridge</td>\n",
" <td>40.625801</td>\n",
" <td>-74.030621</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Brooklyn</td>\n",
" <td>Bensonhurst</td>\n",
" <td>40.611009</td>\n",
" <td>-73.995180</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Brooklyn</td>\n",
" <td>Sunset Park</td>\n",
" <td>40.645103</td>\n",
" <td>-74.010316</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Brooklyn</td>\n",
" <td>Greenpoint</td>\n",
" <td>40.730201</td>\n",
" <td>-73.954241</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Brooklyn</td>\n",
" <td>Gravesend</td>\n",
" <td>40.595260</td>\n",
" <td>-73.973471</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Borough Neighborhood Latitude Longitude\n",
"0 Brooklyn Bay Ridge 40.625801 -74.030621\n",
"1 Brooklyn Bensonhurst 40.611009 -73.995180\n",
"2 Brooklyn Sunset Park 40.645103 -74.010316\n",
"3 Brooklyn Greenpoint 40.730201 -73.954241\n",
"4 Brooklyn Gravesend 40.595260 -73.973471"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"brooklyn_data = newyork_data[newyork_data['Borough'] == 'Brooklyn'].reset_index(drop=True)\n",
"brooklyn_data.head()\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNDAuNzMwODYxOSwtNzMuOTg3MTU1OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNDU3YmI5MGI4YTRjNDA4OTg2YWM4MzU4ZDA4NzgyYTAgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiNGEyOTJmZDg4MzRjOTViMzg4MTRlM2I4ZTU0M2Q5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjI1ODAxMDY1MDEwNjU2LC03NC4wMzA2MjA2OTM1MzgxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTQ2ZmVkYTBmZDA0ZDAyOTVkYTU0Y2JhNmYzYzg3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzBiMjA4NmZkN2M0ZWNmODA4NzU4YjQ2NzFkNTM1ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzcwYjIwODZmZDdjNGVjZjgwODc1OGI0NjcxZDUzNWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheSBSaWRnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmU0NmZlZGEwZmQwNGQwMjk1ZGE1NGNiYTZmM2M4NzIuc2V0Q29udGVudChodG1sXzM3MGIyMDg2ZmQ3YzRlY2Y4MDg3NThiNDY3MWQ1MzVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNiNGEyOTJmZDg4MzRjOTViMzg4MTRlM2I4ZTU0M2Q5LmJpbmRQb3B1cChwb3B1cF9mZTQ2ZmVkYTBmZDA0ZDAyOTVkYTU0Y2JhNmYzYzg3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjE5YWFlZDBhMmU0MWU5YjgyNzA5OGUwYmNmN2JmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYxMTAwODkwMjAyMDQ0LC03My45OTUxNzk5ODM4MDcyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjBhZDYzYjNlMDA0ZmIxYTJkZjI3ZGU5YWUxODQzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjA4Y2FhODgxZWE0NGY4OWJiZjY1MTAxM2Q3YzUxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDYwOGNhYTg4MWVhNDRmODliYmY2NTEwMTNkN2M1MTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlbnNvbmh1cnN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YjBhZDYzYjNlMDA0ZmIxYTJkZjI3ZGU5YWUxODQzOS5zZXRDb250ZW50KGh0bWxfZDYwOGNhYTg4MWVhNDRmODliYmY2NTEwMTNkN2M1MTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWIxOWFhZWQwYTJlNDFlOWI4MjcwOThlMGJjZjdiZmQuYmluZFBvcHVwKHBvcHVwXzViMGFkNjNiM2UwMDRmYjFhMmRmMjdkZTlhZTE4NDM5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5NmUzMWNhM2RlYzQyZDk4NTdjMTI3MWZhYTE5ZGFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ1MTAyOTQ5MjU0MjksLTc0LjAxMDMxNjE4NTI3Nzg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhZGVlYjlmNDIxYzQ2ZmZiMDNkNjNiNjBhZWZhZjk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3YTM5OTQyODFjNDRjYjI4ZjljNGU2NDU0MTY2NzFlID0gJCgnPGRpdiBpZD0iaHRtbF84N2EzOTk0MjgxYzQ0Y2IyOGY5YzRlNjQ1NDE2NjcxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3Vuc2V0IFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhZGVlYjlmNDIxYzQ2ZmZiMDNkNjNiNjBhZWZhZjk1LnNldENvbnRlbnQoaHRtbF84N2EzOTk0MjgxYzQ0Y2IyOGY5YzRlNjQ1NDE2NjcxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOTZlMzFjYTNkZWM0MmQ5ODU3YzEyNzFmYWExOWRhZi5iaW5kUG9wdXAocG9wdXBfMmFkZWViOWY0MjFjNDZmZmIwM2Q2M2I2MGFlZmFmOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTJkYWI3ZDM3ODg4NGM1NDkwNjFiOTFmMWZkZTEyOTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzAyMDA5ODQ4NjQ3LC03My45NTQyNDA5MzEyNzM5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGM2YTZlZDAyYzU0OGE2OWJjNzEyMjhjYjRhMzY2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iY2U3MjhhYTk5M2M0OTZkOTY1NzgzYTQyNmQ5NWRlMSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmNlNzI4YWE5OTNjNDk2ZDk2NTc4M2E0MjZkOTVkZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVucG9pbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwYzZhNmVkMDJjNTQ4YTY5YmM3MTIyOGNiNGEzNjYxLnNldENvbnRlbnQoaHRtbF9iY2U3MjhhYTk5M2M0OTZkOTY1NzgzYTQyNmQ5NWRlMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMmRhYjdkMzc4ODg0YzU0OTA2MWI5MWYxZmRlMTI5Ni5iaW5kUG9wdXAocG9wdXBfYjBjNmE2ZWQwMmM1NDhhNjliYzcxMjI4Y2I0YTM2NjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGViYjRlYmI3NGZjNGMzMWE0MzFkZWY3MzJhYWRjNjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTUyNjAwMTMwNjU5MywtNzMuOTczNDcwODc3MDg0NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzUwZWU2MGQ3YWY3NDU0M2JjZDY1MTFkOGMyMThmZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzU3MjcyNzE2OWFlNGFjYjk3ZTMwZTdmYzAwMTRiZDUgPSAkKCc8ZGl2IGlkPSJodG1sXzM1NzI3MjcxNjlhZTRhY2I5N2UzMGU3ZmMwMDE0YmQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmF2ZXNlbmQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1MGVlNjBkN2FmNzQ1NDNiY2Q2NTExZDhjMjE4ZmQxLnNldENvbnRlbnQoaHRtbF8zNTcyNzI3MTY5YWU0YWNiOTdlMzBlN2ZjMDAxNGJkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZWJiNGViYjc0ZmM0YzMxYTQzMWRlZjczMmFhZGM2NS5iaW5kUG9wdXAocG9wdXBfMzUwZWU2MGQ3YWY3NDU0M2JjZDY1MTFkOGMyMThmZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzVlMzg4M2IyZDhjNDRlN2JhYmU2NzNjYzAzYjcxODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NzY4MjUwNjU2NjYwNCwtNzMuOTY1MDk0NDg3ODUzMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQ1NTI1NWQyZTdlNDk2MTkzMTMyZTg1MTdjYjMzNGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWU0MTlmZThkYTVhNDBjNWIxMjYxOGQyNzQ2MDIwMDYgPSAkKCc8ZGl2IGlkPSJodG1sX2VlNDE5ZmU4ZGE1YTQwYzViMTI2MThkMjc0NjAyMDA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CcmlnaHRvbiBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQ1NTI1NWQyZTdlNDk2MTkzMTMyZTg1MTdjYjMzNGMuc2V0Q29udGVudChodG1sX2VlNDE5ZmU4ZGE1YTQwYzViMTI2MThkMjc0NjAyMDA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M1ZTM4ODNiMmQ4YzQ0ZTdiYWJlNjczY2MwM2I3MTg2LmJpbmRQb3B1cChwb3B1cF80ZDU1MjU1ZDJlN2U0OTYxOTMxMzJlODUxN2NiMzM0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWZhYjk4OGVhNTQ0M2YwOTJhMjBhMzYzNjAxZWY0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4Njg5MDEyNjc4Mzg0LC03My45NDMxODY0MDQ4Mjk3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xN2RiMjhhMmQzMWY0YTdkOGFjYmU2MGI5OWZlZjBmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzI4YTVkNDZiMWI0MWM3OTIzYjg0OTEyMzA3MDM0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTcyOGE1ZDQ2YjFiNDFjNzkyM2I4NDkxMjMwNzAzNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNoZWVwc2hlYWQgQmF5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xN2RiMjhhMmQzMWY0YTdkOGFjYmU2MGI5OWZlZjBmOS5zZXRDb250ZW50KGh0bWxfNTcyOGE1ZDQ2YjFiNDFjNzkyM2I4NDkxMjMwNzAzNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWFmYWI5ODhlYTU0NDNmMDkyYTIwYTM2MzYwMWVmNDYuYmluZFBvcHVwKHBvcHVwXzE3ZGIyOGEyZDMxZjRhN2Q4YWNiZTYwYjk5ZmVmMGY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiYWE1MTBkZjZjNjQ3YTU4NWRhMmExZmViYmQwNDZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE0NDMyNTEzMzUwOTgsLTczLjk1NzQzODQwNTU5OTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0ZjY2NmEwMmM3NjQ0NDJhNDhlZWI5OWUxM2U3N2U1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxOTMwODRjNDY3OTRjMzg5OGJlMDhhM2E2M2M0Mjk4ID0gJCgnPGRpdiBpZD0iaHRtbF81MTkzMDg0YzQ2Nzk0YzM4OThiZTA4YTNhNjNjNDI5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFuaGF0dGFuIFRlcnJhY2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0ZjY2NmEwMmM3NjQ0NDJhNDhlZWI5OWUxM2U3N2U1LnNldENvbnRlbnQoaHRtbF81MTkzMDg0YzQ2Nzk0YzM4OThiZTA4YTNhNjNjNDI5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYmFhNTEwZGY2YzY0N2E1ODVkYTJhMWZlYmJkMDQ2Yy5iaW5kUG9wdXAocG9wdXBfYzRmNjY2YTAyYzc2NDQ0MmE0OGVlYjk5ZTEzZTc3ZTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJjNGI3MzU3NzE3NDViNDhjZjhmNDliZDQzMTcwNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzYzMjU4OTAyNjY3NywtNzMuOTU4NDAxMDY1MzM5MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzEyMGIxNTc4Y2QyNDg5ZWJmNGY1NGY0YThiZGVmYzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWUwYTYyN2NjMzhhNDEyYzg3MGUwODQyNmEwYjQ2NzAgPSAkKCc8ZGl2IGlkPSJodG1sXzVlMGE2MjdjYzM4YTQxMmM4NzBlMDg0MjZhMGI0NjcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GbGF0YnVzaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzEyMGIxNTc4Y2QyNDg5ZWJmNGY1NGY0YThiZGVmYzcuc2V0Q29udGVudChodG1sXzVlMGE2MjdjYzM4YTQxMmM4NzBlMDg0MjZhMGI0NjcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyYzRiNzM1NzcxNzQ1YjQ4Y2Y4ZjQ5YmQ0MzE3MDVhLmJpbmRQb3B1cChwb3B1cF83MTIwYjE1NzhjZDI0ODllYmY0ZjU0ZjRhOGJkZWZjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hM2Q5MDlkMTAzODk0YjFmYjNiMGY5NjEyNTMyZGIzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MDgyOTE3Njk1Mjk0LC03My45NDMyOTExOTA3MzU4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjIzYTkwN2YxNmY0Y2MxOWNhOTQ1ZDg2NjY3NDUyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDlkZmM4YjM1ODY0ZjU3OWEwOTMxMTRhMDU5YjUyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGQ5ZGZjOGIzNTg2NGY1NzlhMDkzMTE0YTA1OWI1MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNyb3duIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmMjNhOTA3ZjE2ZjRjYzE5Y2E5NDVkODY2Njc0NTI4LnNldENvbnRlbnQoaHRtbF84ZDlkZmM4YjM1ODY0ZjU3OWEwOTMxMTRhMDU5YjUyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hM2Q5MDlkMTAzODk0YjFmYjNiMGY5NjEyNTMyZGIzYy5iaW5kUG9wdXAocG9wdXBfNmYyM2E5MDdmMTZmNGNjMTljYTk0NWQ4NjY2NzQ1MjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUxOTVkMWE5MWIzNDkyMzgwZGE0NThjMTkyOTFlOGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NDE3MTc3NjY2ODk2MSwtNzMuOTM2MTAyNTYxODU4MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE2Y2VhYzcwNmMwNDIwZDlhMjliODg3MGVhOWJmMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjk3YTdhMGJjYzgzNDM5YWIxMzhlNGE1ZmZkMDU0YWQgPSAkKCc8ZGl2IGlkPSJodG1sXzY5N2E3YTBiY2M4MzQzOWFiMTM4ZTRhNWZmZDA1NGFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IEZsYXRidXNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMTZjZWFjNzA2YzA0MjBkOWEyOWI4ODcwZWE5YmYxNS5zZXRDb250ZW50KGh0bWxfNjk3YTdhMGJjYzgzNDM5YWIxMzhlNGE1ZmZkMDU0YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWUxOTVkMWE5MWIzNDkyMzgwZGE0NThjMTkyOTFlOGUuYmluZFBvcHVwKHBvcHVwXzMxNmNlYWM3MDZjMDQyMGQ5YTI5Yjg4NzBlYTliZjE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiODczNzU4NDc5OTRjN2Y5ZGIyZmE0NTg5NTEyMDMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQyMzgxOTU4MDAzNTI2LC03My45ODA0MjExMDU1OTQ3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTM5OTBhYzgwYTU0MzVhYmY4ODEzODY5ZTE2ZDU0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMmMxNTEwMDY2ZWY0N2IzOWYyMjY0MGM0ZjYzMGVjZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzJjMTUxMDA2NmVmNDdiMzlmMjI2NDBjNGY2MzBlY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktlbnNpbmd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1Mzk5MGFjODBhNTQzNWFiZjg4MTM4NjllMTZkNTQyLnNldENvbnRlbnQoaHRtbF8zMmMxNTEwMDY2ZWY0N2IzOWYyMjY0MGM0ZjYzMGVjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Yjg3Mzc1ODQ3OTk0YzdmOWRiMmZhNDU4OTUxMjAzMS5iaW5kUG9wdXAocG9wdXBfOTUzOTkwYWM4MGE1NDM1YWJmODgxMzg2OWUxNmQ1NDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjVjYWNhMDRjNjZhNDNmMjg5Y2M1NmMzNjQxMzE1YTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTY5NDU4MzU3NTEwNCwtNzMuOTgwMDczNDA0MzAxNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzI4YjRjMWFlYTA0NDc1NGJmYzFiM2U3NGE3NDY3ZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWNkNjk4Nzc3OGFkNDhkZDg4MTQwMWQ0ZjBkN2RhNDEgPSAkKCc8ZGl2IGlkPSJodG1sX2VjZDY5ODc3NzhhZDQ4ZGQ4ODE0MDFkNGYwZDdkYTQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaW5kc29yIFRlcnJhY2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyOGI0YzFhZWEwNDQ3NTRiZmMxYjNlNzRhNzQ2N2UwLnNldENvbnRlbnQoaHRtbF9lY2Q2OTg3Nzc4YWQ0OGRkODgxNDAxZDRmMGQ3ZGE0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNWNhY2EwNGM2NmE0M2YyODljYzU2YzM2NDEzMTVhMi5iaW5kUG9wdXAocG9wdXBfYzI4YjRjMWFlYTA0NDc1NGJmYzFiM2U3NGE3NDY3ZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY4Mjc2YmExZjAxNGQyZGE3MGI2ODViZTM2NGJkODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzY4MjIyNjIyNTQ3MjQsLTczLjk2NDg1OTI0MjYyNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTkxMTUzMzRhM2Q0NDI1ODhhODllODAxNTM4NGVlMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ1ZWJhYTc0YWE3NGI2ODkxM2MwZjUyOGMyMDhlMzAgPSAkKCc8ZGl2IGlkPSJodG1sX2ZkNWViYWE3NGFhNzRiNjg5MTNjMGY1MjhjMjA4ZTMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qcm9zcGVjdCBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTExNTMzNGEzZDQ0MjU4OGE4OWU4MDE1Mzg0ZWUxYy5zZXRDb250ZW50KGh0bWxfZmQ1ZWJhYTc0YWE3NGI2ODkxM2MwZjUyOGMyMDhlMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY4Mjc2YmExZjAxNGQyZGE3MGI2ODViZTM2NGJkODUuYmluZFBvcHVwKHBvcHVwXzE5MTE1MzM0YTNkNDQyNTg4YTg5ZTgwMTUzODRlZTFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3MzQxNDhiN2E3OTRhMzQ5ZDE2NDJlYWNlZjQ1NjZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjYzOTQ5OTQzMzk3NTUsLTczLjkxMDIzNTM2MTc2NjA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NmZGJjZDRhMzA4YjRkY2RhZGUxYTM1MjUzNjI0MWU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjMzM5YTJhNTZlNTQwNmJhMjVlZDZjZWI5ZTM1YzQ1ID0gJCgnPGRpdiBpZD0iaHRtbF81YzMzOWEyYTU2ZTU0MDZiYTI1ZWQ2Y2ViOWUzNWM0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvd25zdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmZGJjZDRhMzA4YjRkY2RhZGUxYTM1MjUzNjI0MWU0LnNldENvbnRlbnQoaHRtbF81YzMzOWEyYTU2ZTU0MDZiYTI1ZWQ2Y2ViOWUzNWM0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NzM0MTQ4YjdhNzk0YTM0OWQxNjQyZWFjZWY0NTY2Zi5iaW5kUG9wdXAocG9wdXBfY2ZkYmNkNGEzMDhiNGRjZGFkZTFhMzUyNTM2MjQxZTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODMyNzQ3YWFiMThmNDg2YmJmM2NlMzA4MTE3YmQxNmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDcxNDQzOTM0NDI1MSwtNzMuOTU4MTE1MjkyMjA5MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQwZDI2N2JjZDA1NGRjZDg0NGQxMDY3YzYwYjhiM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTYwNmViNzQ1NmJjNDhkN2I2NjMwMjU1MjgyOTEwNzUgPSAkKCc8ZGl2IGlkPSJodG1sXzk2MDZlYjc0NTZiYzQ4ZDdiNjYzMDI1NTI4MjkxMDc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxsaWFtc2J1cmc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0MGQyNjdiY2QwNTRkY2Q4NDRkMTA2N2M2MGI4YjNkLnNldENvbnRlbnQoaHRtbF85NjA2ZWI3NDU2YmM0OGQ3YjY2MzAyNTUyODI5MTA3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MzI3NDdhYWIxOGY0ODZiYmYzY2UzMDgxMTdiZDE2YS5iaW5kUG9wdXAocG9wdXBfODQwZDI2N2JjZDA1NGRjZDg0NGQxMDY3YzYwYjhiM2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU4YjFiOTQ4MzQ4NGIyZWJjMWY5YmEyYjNmNGI2ZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTgxMTYxMTAxNzkwMSwtNzMuOTI1MjU3OTc0ODcwNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBlYjc5ZTE5YjNiNGE3MTk5MjBkZDVkNzhkZWIyMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RkZmM5M2UxZjU0NGFmNTg3YWM4YjExNzQ5NjJkZWMgPSAkKCc8ZGl2IGlkPSJodG1sX2NkZGZjOTNlMWY1NDRhZjU4N2FjOGIxMTc0OTYyZGVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CdXNod2ljazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzBlYjc5ZTE5YjNiNGE3MTk5MjBkZDVkNzhkZWIyMDEuc2V0Q29udGVudChodG1sX2NkZGZjOTNlMWY1NDRhZjU4N2FjOGIxMTc0OTYyZGVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1OGIxYjk0ODM0ODRiMmViYzFmOWJhMmIzZjRiNmUxLmJpbmRQb3B1cChwb3B1cF83MGViNzllMTliM2I0YTcxOTkyMGRkNWQ3OGRlYjIwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGVkMGMzNjQ2NzY0NmYwOGQ4OWU0MmUxYWM1ODYyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzIzMTYwNzcyMDQ1NiwtNzMuOTQxNzg0ODg2OTAyOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDE5YzkwMDM3MzMxNGI4ZmI5Y2FjMjVjOWI2ZTU4NWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjJmOTg2MjZmN2E4NDA4NmE0NzkyN2VkYThkOTIxNDUgPSAkKCc8ZGl2IGlkPSJodG1sX2YyZjk4NjI2ZjdhODQwODZhNDc5MjdlZGE4ZDkyMTQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWRmb3JkIFN0dXl2ZXNhbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxOWM5MDAzNzMzMTRiOGZiOWNhYzI1YzliNmU1ODVlLnNldENvbnRlbnQoaHRtbF9mMmY5ODYyNmY3YTg0MDg2YTQ3OTI3ZWRhOGQ5MjE0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNGVkMGMzNjQ2NzY0NmYwOGQ4OWU0MmUxYWM1ODYyZS5iaW5kUG9wdXAocG9wdXBfMDE5YzkwMDM3MzMxNGI4ZmI5Y2FjMjVjOWI2ZTU4NWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjQ2NTZkNzY5ZDkyNDcwMGJlMjZmNzE4MTJkOGVlZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTU4NjM3MjI3MjQwODQsLTczLjk5Mzc4MjI1NDk2NDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5NTRiMGU0MzJkYjQ3M2Q5YTNkZTU5ODdhOTU1N2JhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4NzYwODY3OGRkNzQxOTM5YWZhNTk1YWM2YTdmMTM4ID0gJCgnPGRpdiBpZD0iaHRtbF9iODc2MDg2NzhkZDc0MTkzOWFmYTU5NWFjNmE3ZjEzOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvb2tseW4gSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDk1NGIwZTQzMmRiNDczZDlhM2RlNTk4N2E5NTU3YmEuc2V0Q29udGVudChodG1sX2I4NzYwODY3OGRkNzQxOTM5YWZhNTk1YWM2YTdmMTM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0NjU2ZDc2OWQ5MjQ3MDBiZTI2ZjcxODEyZDhlZWY1LmJpbmRQb3B1cChwb3B1cF9kOTU0YjBlNDMyZGI0NzNkOWEzZGU1OTg3YTk1NTdiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTUxNWQ0Y2NjZDI0MWU3OTNhNWVjNjA0OTRhODU5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzkxOTcyMjQ4NTU3NCwtNzMuOTk4NTYxMzkyMTg0NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjYyMzM1MTQ3ODI1NGNkMWIxYjkyM2JjZTM1NWI4NGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGU0MDBmZmI4ZTQzNGIwY2E5Yzg2NDBiZGIwNzZmMTkgPSAkKCc8ZGl2IGlkPSJodG1sXzRlNDAwZmZiOGU0MzRiMGNhOWM4NjQwYmRiMDc2ZjE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2JibGUgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjYyMzM1MTQ3ODI1NGNkMWIxYjkyM2JjZTM1NWI4NGQuc2V0Q29udGVudChodG1sXzRlNDAwZmZiOGU0MzRiMGNhOWM4NjQwYmRiMDc2ZjE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIxNTE1ZDRjY2NkMjQxZTc5M2E1ZWM2MDQ5NGE4NTkzLmJpbmRQb3B1cChwb3B1cF8yNjIzMzUxNDc4MjU0Y2QxYjFiOTIzYmNlMzU1Yjg0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGVjNDlkMDY2N2Q0ZDRmOWJlMDgyOGE1OGI4MmE4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDU0MDIzMTA3NjQ4NSwtNzMuOTk0NjUzNzI4MjgwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQyZjZmZjA1MGUyNDFhOTkzNGE1ODM5ZjVjMTg1NDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhjODMyNDNlYTg5NDZjNjlkMjhkNDM2OTU3NTE5YTAgPSAkKCc8ZGl2IGlkPSJodG1sXzA4YzgzMjQzZWE4OTQ2YzY5ZDI4ZDQzNjk1NzUxOWEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIEdhcmRlbnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkMmY2ZmYwNTBlMjQxYTk5MzRhNTgzOWY1YzE4NTQ4LnNldENvbnRlbnQoaHRtbF8wOGM4MzI0M2VhODk0NmM2OWQyOGQ0MzY5NTc1MTlhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOGVjNDlkMDY2N2Q0ZDRmOWJlMDgyOGE1OGI4MmE4Yi5iaW5kUG9wdXAocG9wdXBfOGQyZjZmZjA1MGUyNDFhOTkzNGE1ODM5ZjVjMTg1NDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg0YzlmYWY1NDhjNGY5ZTk0OTM3NDFiNGYyODE2ZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzYyNTMyMzAyNTA4ODYsLTc0LjAxMjc1ODk3NDczNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2U4MWU3Njc2ZjBmNDQzYjg3NjNkYjU3MTRhMzc1MmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQ3NTJmNjIzNGJmNDhkZjhmN2VmNDE2N2VkNjMzZjUgPSAkKCc8ZGl2IGlkPSJodG1sX2I0NzUyZjYyMzRiZjQ4ZGY4ZjdlZjQxNjdlZDYzM2Y1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SZWQgSG9vazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2U4MWU3Njc2ZjBmNDQzYjg3NjNkYjU3MTRhMzc1MmEuc2V0Q29udGVudChodG1sX2I0NzUyZjYyMzRiZjQ4ZGY4ZjdlZjQxNjdlZDYzM2Y1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4NGM5ZmFmNTQ4YzRmOWU5NDkzNzQxYjRmMjgxNmQzLmJpbmRQb3B1cChwb3B1cF8zZTgxZTc2NzZmMGY0NDNiODc2M2RiNTcxNGEzNzUyYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZjBiNTFiYzcyZmM0ZDY2OTM0MTA2ZjliYjliZDJlYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MzkzMTE0MzE4NzE1NCwtNzMuOTk0NDQwODcxNDUzMzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU0YjcxMDdlNTRmNDMzMWI5Nzg3ZDM0OWZiMTY2ZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjc0ODBlOWRhZDc1NGQxNGExY2IxMWIxMmNkZDA0NzYgPSAkKCc8ZGl2IGlkPSJodG1sX2I3NDgwZTlkYWQ3NTRkMTRhMWNiMTFiMTJjZGQwNDc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Hb3dhbnVzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTRiNzEwN2U1NGY0MzMxYjk3ODdkMzQ5ZmIxNjZlMi5zZXRDb250ZW50KGh0bWxfYjc0ODBlOWRhZDc1NGQxNGExY2IxMWIxMmNkZDA0NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWYwYjUxYmM3MmZjNGQ2NjkzNDEwNmY5YmI5YmQyZWEuYmluZFBvcHVwKHBvcHVwXzllNGI3MTA3ZTU0ZjQzMzFiOTc4N2QzNDlmYjE2NmUyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZDM4YWU3MzZhODRhMjg5NjQ1Mjk0NGFjNGZlNWM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg4NTI3MjYwMTg5NzcsLTczLjk3MjkwNTc0MzY5MDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmM2QzNzQwZWZmMzQ4ZTg4Nzk5ZDljMmQ4OWU2MWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3ZjQzYjBiN2NjMjRiMDNhYWFkMGM3NDI4MjkzMDYyID0gJCgnPGRpdiBpZD0iaHRtbF81N2Y0M2IwYjdjYzI0YjAzYWFhZDBjNzQyODI5MzA2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9ydCBHcmVlbmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmM2QzNzQwZWZmMzQ4ZTg4Nzk5ZDljMmQ4OWU2MWM1LnNldENvbnRlbnQoaHRtbF81N2Y0M2IwYjdjYzI0YjAzYWFhZDBjNzQyODI5MzA2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MmQzOGFlNzM2YTg0YTI4OTY0NTI5NDRhYzRmZTVjNS5iaW5kUG9wdXAocG9wdXBfMWYzZDM3NDBlZmYzNDhlODg3OTlkOWMyZDg5ZTYxYzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODhlODY4MjEyNTBkNDllY2I3N2E0M2I4MTY3Y2YyZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzIzMjA1MjI2ODE5NywtNzMuOTc3MDUwMzAxODM5MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmY4YjVmMDNmYzIzNDM4NWEyMGQ3NWMzYTA2N2YzNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTdhMjkzOWQxZTkyNGZmOTlkYTNjYWFmOTIyNWIwYTAgPSAkKCc8ZGl2IGlkPSJodG1sX2U3YTI5MzlkMWU5MjRmZjk5ZGEzY2FhZjkyMjViMGEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrIFNsb3BlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjhiNWYwM2ZjMjM0Mzg1YTIwZDc1YzNhMDY3ZjM0Mi5zZXRDb250ZW50KGh0bWxfZTdhMjkzOWQxZTkyNGZmOTlkYTNjYWFmOTIyNWIwYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODhlODY4MjEyNTBkNDllY2I3N2E0M2I4MTY3Y2YyZDMuYmluZFBvcHVwKHBvcHVwXzZmOGI1ZjAzZmMyMzQzODVhMjBkNzVjM2EwNjdmMzQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiYjY4ZGVlYTY0MDQxMTE5MDc4NzViNmZiMWRiYTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyMzkxMDExNDQyMTEsLTczLjg3NjYxNTk2NDU3Mjk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjNTdiNTFkNzllMDRlYjk4ODMyYmIzMTEyNDZiY2IxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxZjNiZDQxNzMxNTQxYjQ5ZmMzOTFkY2RiOTQxYmMxID0gJCgnPGRpdiBpZD0iaHRtbF81MWYzYmQ0MTczMTU0MWI0OWZjMzkxZGNkYjk0MWJjMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q3lwcmVzcyBIaWxsczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmM1N2I1MWQ3OWUwNGViOTg4MzJiYjMxMTI0NmJjYjEuc2V0Q29udGVudChodG1sXzUxZjNiZDQxNzMxNTQxYjQ5ZmMzOTFkY2RiOTQxYmMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiYjY4ZGVlYTY0MDQxMTE5MDc4NzViNmZiMWRiYTI5LmJpbmRQb3B1cChwb3B1cF9iYzU3YjUxZDc5ZTA0ZWI5ODgzMmJiMzExMjQ2YmNiMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTEzMmRjODJjMGU0MDIwOTY5NDk4ZTg0YzEyYjI5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2OTkyNTcwMDg0NzA0NSwtNzMuODgwNjk4NjM5MTczNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjA0NjIwNTAyOGFhNDhhOGE5NDAwNmZhZGM3NDlmYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2M1MWJjMmEyMmQzNGJkYjljNTVlN2FlOGM1MWQwYmYgPSAkKCc8ZGl2IGlkPSJodG1sX2NjNTFiYzJhMjJkMzRiZGI5YzU1ZTdhZThjNTFkMGJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IE5ldyBZb3JrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDQ2MjA1MDI4YWE0OGE4YTk0MDA2ZmFkYzc0OWZhMy5zZXRDb250ZW50KGh0bWxfY2M1MWJjMmEyMmQzNGJkYjljNTVlN2FlOGM1MWQwYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ExMzJkYzgyYzBlNDAyMDk2OTQ5OGU4NGMxMmIyOTEuYmluZFBvcHVwKHBvcHVwXzYwNDYyMDUwMjhhYTQ4YThhOTQwMDZmYWRjNzQ5ZmEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3NzQ0NDk3ZDA1NjQ5ZGVhMzNlNmYyYmQzMjA2MjU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ3NTg5MDUyMzA4NzQsLTczLjg3OTM2OTcwMDQ1ODc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0OGNkNDRlMTI0ZjRjYmZhZmIyYTdhNGVmNDA0Y2M1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmODc3ZWE5Nzk2NzQ3YjFhZWNiNGEyOWE1N2RjY2NmID0gJCgnPGRpdiBpZD0iaHRtbF84Zjg3N2VhOTc5Njc0N2IxYWVjYjRhMjlhNTdkY2NjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhcnJldHQgQ2l0eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQ4Y2Q0NGUxMjRmNGNiZmFmYjJhN2E0ZWY0MDRjYzUuc2V0Q29udGVudChodG1sXzhmODc3ZWE5Nzk2NzQ3YjFhZWNiNGEyOWE1N2RjY2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3NzQ0NDk3ZDA1NjQ5ZGVhMzNlNmYyYmQzMjA2MjU0LmJpbmRQb3B1cChwb3B1cF9jNDhjZDQ0ZTEyNGY0Y2JmYWZiMmE3YTRlZjQwNGNjNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmFiYmRmY2YzZjg0OTIxYjAxOGU3NTRiZmVjYzYzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzNTU2NDMyNzk3NDI4LC03My45MDIwOTI2OTc3ODk2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOTYyYjUxZjFjYjA0MTk2YWQwNTk5OTNjZjExY2ExYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTIyZDkxMzAxMGY0OWVlYmM0NTYzNDNjZTBmZTA3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfODEyMmQ5MTMwMTBmNDllZWJjNDU2MzQzY2UwZmUwNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhbmFyc2llPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTYyYjUxZjFjYjA0MTk2YWQwNTk5OTNjZjExY2ExYS5zZXRDb250ZW50KGh0bWxfODEyMmQ5MTMwMTBmNDllZWJjNDU2MzQzY2UwZmUwNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWZhYmJkZmNmM2Y4NDkyMWIwMThlNzU0YmZlY2M2MzYuYmluZFBvcHVwKHBvcHVwXzE5NjJiNTFmMWNiMDQxOTZhZDA1OTk5M2NmMTFjYTFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExMzkxYmE2MjAwYzQzOWI5MzdlYjEzMjIxZmExNmIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMwNDQ2MDQzNzU3NDY2LC03My45MjkxMTMwMjY0NDY3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzA5OTk5NjBlNDU0ZDc1Yjk4YTA0ODJkODY4NzFjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NDg3NjA4ZThkNDA0YWUyOGIzYmFmM2RmYTRlNzJmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzQ4NzYwOGU4ZDQwNGFlMjhiM2JhZjNkZmE0ZTcyZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZsYXRsYW5kczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGMwOTk5OTYwZTQ1NGQ3NWI5OGEwNDgyZDg2ODcxYzEuc2V0Q29udGVudChodG1sXzc0ODc2MDhlOGQ0MDRhZTI4YjNiYWYzZGZhNGU3MmZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ExMzkxYmE2MjAwYzQzOWI5MzdlYjEzMjIxZmExNmIzLmJpbmRQb3B1cChwb3B1cF9kYzA5OTk5NjBlNDU0ZDc1Yjk4YTA0ODJkODY4NzFjMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MmExYTNhMTRjYjE0MDZhYWJhNWQ5Y2FjN2Q0OGEyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwNjMzNjQyMTY4NTYyNiwtNzMuOTA4MTg1NzE3Nzc0MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDYyOGJmZDBiNmM0NDZkZGIyNTIyOTgzNmUyNTIyZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDExMjU4N2JjY2JmNDU3MGExZWJiNDcwNDk3ZDg3ZDcgPSAkKCc8ZGl2IGlkPSJodG1sXzQxMTI1ODdiY2NiZjQ1NzBhMWViYjQ3MDQ5N2Q4N2Q3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWxsIElzbGFuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDYyOGJmZDBiNmM0NDZkZGIyNTIyOTgzNmUyNTIyZGUuc2V0Q29udGVudChodG1sXzQxMTI1ODdiY2NiZjQ1NzBhMWViYjQ3MDQ5N2Q4N2Q3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyYTFhM2ExNGNiMTQwNmFhYmE1ZDljYWM3ZDQ4YTJjLmJpbmRQb3B1cChwb3B1cF8wNjI4YmZkMGI2YzQ0NmRkYjI1MjI5ODM2ZTI1MjJkZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjFiNmY5ZWUxNmM0MmFjYmFkODhiMTgzYTk5NGZiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NzkxMzUwMzA4NjU3LC03My45NDM1MzcyMjg5MTg4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTQ1MWVhN2JiZDI0MWY2OWJjODZhNzA5MmE5MWJhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYjI5NDQ4YzY5MWY0MzE2ODAzM2M4OTFlMzc4Mzc5MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYmIyOTQ0OGM2OTFmNDMxNjgwMzNjODkxZTM3ODM3OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hbmhhdHRhbiBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDE0NTFlYTdiYmQyNDFmNjliYzg2YTcwOTJhOTFiYTguc2V0Q29udGVudChodG1sX2JiMjk0NDhjNjkxZjQzMTY4MDMzYzg5MWUzNzgzNzkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViMWI2ZjllZTE2YzQyYWNiYWQ4OGIxODNhOTk0ZmI0LmJpbmRQb3B1cChwb3B1cF80MTQ1MWVhN2JiZDI0MWY2OWJjODZhNzA5MmE5MWJhOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGM4NTk0NzI4ZTg0MWIwYmU0NGU0NjExOWNkZjI2NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NDI5MjU2NDcxNjAxLC03My45ODg2ODI5NTgyMTYzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODYyMGU4MDkxMGQ0OWRjYTQxODJlNDM3M2FlMTk2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjRhNTJhODU5OWU0MzlhYWU5NGVkNGM2NGRiYTQxZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjI0YTUyYTg1OTllNDM5YWFlOTRlZDRjNjRkYmE0MWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmV5IElzbGFuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg2MjBlODA5MTBkNDlkY2E0MTgyZTQzNzNhZTE5NmUuc2V0Q29udGVudChodG1sXzIyNGE1MmE4NTk5ZTQzOWFhZTk0ZWQ0YzY0ZGJhNDFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0Yzg1OTQ3MjhlODQxYjBiZTQ0ZTQ2MTE5Y2RmMjY1LmJpbmRQb3B1cChwb3B1cF85ODYyMGU4MDkxMGQ0OWRjYTQxODJlNDM3M2FlMTk2ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMWU5MGQxYzRlNDE0MGI3OGMwODM3NGIwODI2MmQ4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5OTUxODcwMjgyMjM4LC03My45OTg3NTIyMTQ0MzUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTBkODE1MjRmMjA0OTQ5OTIwNjc0YzdjZTAxNWJmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Y2IwOWQyZWEwZjA0OTc0OWVhYTRiMjJlYzczMGU1ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2NiMDlkMmVhMGYwNDk3NDllYWE0YjIyZWM3MzBlNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhdGggQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxMGQ4MTUyNGYyMDQ5NDk5MjA2NzRjN2NlMDE1YmY3LnNldENvbnRlbnQoaHRtbF83Y2IwOWQyZWEwZjA0OTc0OWVhYTRiMjJlYzczMGU1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMWU5MGQxYzRlNDE0MGI3OGMwODM3NGIwODI2MmQ4Ni5iaW5kUG9wdXAocG9wdXBfMzEwZDgxNTI0ZjIwNDk0OTkyMDY3NGM3Y2UwMTViZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmVlZjUzNjBiY2EzNGYwYzhlYjI4N2UwNjc1ZmFlOTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzMxMzA1MTI3NTgwMTUsLTczLjk5MDQ5ODIzMDQ0ODExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmNGE2NGI4MzI2NjQzYjdiOTJhNmUyYzk4N2QyMmIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmYjRjZGFiYjgxYzQyZjE5MjZhNTU5YjAxMjhlMjdhID0gJCgnPGRpdiBpZD0iaHRtbF8yZmI0Y2RhYmI4MWM0MmYxOTI2YTU1OWIwMTI4ZTI3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qm9yb3VnaCBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjRhNjRiODMyNjY0M2I3YjkyYTZlMmM5ODdkMjJiMC5zZXRDb250ZW50KGh0bWxfMmZiNGNkYWJiODFjNDJmMTkyNmE1NTliMDEyOGUyN2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmVlZjUzNjBiY2EzNGYwYzhlYjI4N2UwNjc1ZmFlOTkuYmluZFBvcHVwKHBvcHVwXzBmNGE2NGI4MzI2NjQzYjdiOTJhNmUyYzk4N2QyMmIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiMjc5MTk0NDExMDQ1MGZiMGZiZTlmZmE5ZDA1NzI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE5MjE5NDU3NzIyNjM2LC03NC4wMTkzMTM3NTYzNjAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzEwODFlZDBjNDY0YmIwODE0ZGVmMTkxNGM5OWU0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjg3OWM5YjM1YzA0Njg0YjQ2NTA4YjJhMmY0YjUwYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDY4NzljOWIzNWMwNDY4NGI0NjUwOGIyYTJmNGI1MGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkR5a2VyIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3MTA4MWVkMGM0NjRiYjA4MTRkZWYxOTE0Yzk5ZTQ5LnNldENvbnRlbnQoaHRtbF8wNjg3OWM5YjM1YzA0Njg0YjQ2NTA4YjJhMmY0YjUwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYjI3OTE5NDQxMTA0NTBmYjBmYmU5ZmZhOWQwNTcyOC5iaW5kUG9wdXAocG9wdXBfMDcxMDgxZWQwYzQ2NGJiMDgxNGRlZjE5MTRjOTllNDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDMzY2UyMzA4NjNmNDBjN2E1YWYyYWJjYjRhYWQ4NGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTA4NDg0MzM5MDIwNDYsLTczLjkzMDEwMTcwNjkxMTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5ZWYyZDUzN2NjODRlN2RiZWIxNmRlOGQwMDA3NzQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjYjM3Y2Q0NjA5NDQ2YTU5MzBhYmFjY2ZmOWYxOTNhID0gJCgnPGRpdiBpZD0iaHRtbF82Y2IzN2NkNDYwOTQ0NmE1OTMwYWJhY2NmZjlmMTkzYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R2Vycml0c2VuIEJlYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOWVmMmQ1MzdjYzg0ZTdkYmViMTZkZThkMDAwNzc0MC5zZXRDb250ZW50KGh0bWxfNmNiMzdjZDQ2MDk0NDZhNTkzMGFiYWNjZmY5ZjE5M2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDMzY2UyMzA4NjNmNDBjN2E1YWYyYWJjYjRhYWQ4NGQuYmluZFBvcHVwKHBvcHVwX2I5ZWYyZDUzN2NjODRlN2RiZWIxNmRlOGQwMDA3NzQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyYzMwN2JhZjRlMzQxMzg4MTJjZTY3NmU0ZWMxNmNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjA5NzQ3Nzc5ODk0NjA0LC03My45MzEzNDQwNDEwODQ5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2Q0NDM4NGM1MWM0MmQ1OWU0NTgxNjUwOTNhNjg3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjUwOTk5MGY3NDY0ZTJiYmY4MzZjNTgwMzcxZTIyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjI1MDk5OTBmNzQ2NGUyYmJmODM2YzU4MDM3MWUyMjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmluZSBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2Q0NDM4NGM1MWM0MmQ1OWU0NTgxNjUwOTNhNjg3OC5zZXRDb250ZW50KGh0bWxfNjI1MDk5OTBmNzQ2NGUyYmJmODM2YzU4MDM3MWUyMjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTJjMzA3YmFmNGUzNDEzODgxMmNlNjc2ZTRlYzE2Y2QuYmluZFBvcHVwKHBvcHVwX2M3ZDQ0Mzg0YzUxYzQyZDU5ZTQ1ODE2NTA5M2E2ODc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjNDFmMWJlMTQ3NDQwNDBhNzJmNDJiODhkOGVmMGEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkzMjI5NDIxODgxNTA0LC03My45Njc4NDMwNjIxNjM2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWMzY2Y3YjQ4YWY0Y2JmYjdhYmY1OTUxY2QxZGZiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYTMwOGVjMDI1YWY0MGEwODYwMjA3NDZkYWM3NzIwNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYmEzMDhlYzAyNWFmNDBhMDg2MDIwNzQ2ZGFjNzcyMDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2VjM2NmN2I0OGFmNGNiZmI3YWJmNTk1MWNkMWRmYjEuc2V0Q29udGVudChodG1sX2JhMzA4ZWMwMjVhZjQwYTA4NjAyMDc0NmRhYzc3MjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjNDFmMWJlMTQ3NDQwNDBhNzJmNDJiODhkOGVmMGEyLmJpbmRQb3B1cChwb3B1cF8zZWMzY2Y3YjQ4YWY0Y2JmYjdhYmY1OTUxY2QxZGZiMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OGVkMDU2ZjY3NTg0NjVkODg3YmYyYWY2MTExNzhlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3NjM3NTM3ODkwMjI0LC03NC4wMDc4NzMxMTIwMDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3ZTc5ODEwOWE4ODRiOTBhOTRkMmQ2Nzc3Njk2MjVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0YjFhMTZjMDVkMjQxMDA4YzViZWJkZTdjYWJjNDkzID0gJCgnPGRpdiBpZD0iaHRtbF9hNGIxYTE2YzA1ZDI0MTAwOGM1YmViZGU3Y2FiYzQ5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2VhIEdhdGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3ZTc5ODEwOWE4ODRiOTBhOTRkMmQ2Nzc3Njk2MjVlLnNldENvbnRlbnQoaHRtbF9hNGIxYTE2YzA1ZDI0MTAwOGM1YmViZGU3Y2FiYzQ5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OGVkMDU2ZjY3NTg0NjVkODg3YmYyYWY2MTExNzhlMy5iaW5kUG9wdXAocG9wdXBfYjdlNzk4MTA5YTg4NGI5MGE5NGQyZDY3Nzc2OTYyNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDBhNGE4NmRmMDY2NDg4NWI2MDQ2MjYxY2IyMGUyZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTA4NDQwMjEwOTgwMiwtNzMuOTgzNDYzMzc0MzEwOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEzMGM3ZTQ2NzlmNGIxNjlhMDVjODYwYmU5MmZlZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM1NGZkNDgxMzVhNGFlOTllMzY2ZDQ5ZTdhODRjNTQgPSAkKCc8ZGl2IGlkPSJodG1sXzVjNTRmZDQ4MTM1YTRhZTk5ZTM2NmQ0OWU3YTg0YzU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb3dudG93bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGEzMGM3ZTQ2NzlmNGIxNjlhMDVjODYwYmU5MmZlZTcuc2V0Q29udGVudChodG1sXzVjNTRmZDQ4MTM1YTRhZTk5ZTM2NmQ0OWU3YTg0YzU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwYTRhODZkZjA2NjQ4ODViNjA0NjI2MWNiMjBlMmVkLmJpbmRQb3B1cChwb3B1cF80YTMwYzdlNDY3OWY0YjE2OWEwNWM4NjBiZTkyZmVlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDVmN2JhZjYyMjA0N2ZiOTNjNWUxMjA1MWM2ZjllMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NTY4MjkxMjA5MTQ0NCwtNzMuOTgzNzQ4MjQxMTU3OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkyMGY4OGE4YmQ0NGY2MGFhMGFiOWZkOTY3NTliOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZThkMWIzZGI5ZWE2NDM1YWE0ZDcyNjFjODUxMzU0OWMgPSAkKCc8ZGl2IGlkPSJodG1sX2U4ZDFiM2RiOWVhNjQzNWFhNGQ3MjYxYzg1MTM1NDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb2VydW0gSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODkyMGY4OGE4YmQ0NGY2MGFhMGFiOWZkOTY3NTliOGEuc2V0Q29udGVudChodG1sX2U4ZDFiM2RiOWVhNjQzNWFhNGQ3MjYxYzg1MTM1NDljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwNWY3YmFmNjIyMDQ3ZmI5M2M1ZTEyMDUxYzZmOWUzLmJpbmRQb3B1cChwb3B1cF84OTIwZjg4YThiZDQ0ZjYwYWEwYWI5ZmQ5Njc1OWI4YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTI3NDc1NWI3Yzc0OGMzOGIxOGU1M2IzNDJiNTYyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY1ODQyMDAxNzQ2OTgxNSwtNzMuOTU0ODk4NjcwNzc3MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDM5MmVmMGMxYmM4NDZjOWE1NmJjY2QyZDU3OTJmZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGI2Y2M0OTlhZGNiNDk2NmI1ODRmNWIwNjJkMDE5ODAgPSAkKCc8ZGl2IGlkPSJodG1sXzhiNmNjNDk5YWRjYjQ5NjZiNTg0ZjViMDYyZDAxOTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qcm9zcGVjdCBMZWZmZXJ0cyBHYXJkZW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzkyZWYwYzFiYzg0NmM5YTU2YmNjZDJkNTc5MmZmNC5zZXRDb250ZW50KGh0bWxfOGI2Y2M0OTlhZGNiNDk2NmI1ODRmNWIwNjJkMDE5ODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDUyNzQ3NTViN2M3NDhjMzhiMThlNTNiMzQyYjU2MmYuYmluZFBvcHVwKHBvcHVwXzQzOTJlZjBjMWJjODQ2YzlhNTZiY2NkMmQ1NzkyZmY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwZDlmYjI0MmUwODQ2M2ViMGEyYzE0ZDExNDNhOTMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc4NDAyNTU0Nzk1MzU1LC03My45MTMwNjgzMTc4NzM5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YTVjMmM5YjQ5MjI0YTYyYjQ0N2UyYTkxMTY1ZmZmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzU4MTIwNmNiNTM0MGM2YWUzYzA3ZmFmZGE4YzBlMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGM1ODEyMDZjYjUzNDBjNmFlM2MwN2ZhZmRhOGMwZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9jZWFuIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhNWMyYzliNDkyMjRhNjJiNDQ3ZTJhOTExNjVmZmYxLnNldENvbnRlbnQoaHRtbF84YzU4MTIwNmNiNTM0MGM2YWUzYzA3ZmFmZGE4YzBlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMGQ5ZmIyNDJlMDg0NjNlYjBhMmMxNGQxMTQzYTkzMS5iaW5kUG9wdXAocG9wdXBfNmE1YzJjOWI0OTIyNGE2MmI0NDdlMmE5MTE2NWZmZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVlNDJmOTY4YmUwNDU1M2JhNTBlMjM1ZjVhZjY4OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzg1Njk5NTcyNzQ3OSwtNzMuODY3OTc1OTgwODEzMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmIwYzU5OWE4NmMxNDdmMjg4YjU4MzNkZjYxODI4YjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2M1MjI2YWYyMGI1NGY5ZWIwMjExNzI1NmJmZGYzYTkgPSAkKCc8ZGl2IGlkPSJodG1sXzNjNTIyNmFmMjBiNTRmOWViMDIxMTcyNTZiZmRmM2E5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaXR5IExpbmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZiMGM1OTlhODZjMTQ3ZjI4OGI1ODMzZGY2MTgyOGI4LnNldENvbnRlbnQoaHRtbF8zYzUyMjZhZjIwYjU0ZjllYjAyMTE3MjU2YmZkZjNhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNWU0MmY5NjhiZTA0NTUzYmE1MGUyMzVmNWFmNjg4Yi5iaW5kUG9wdXAocG9wdXBfZmIwYzU5OWE4NmMxNDdmMjg4YjU4MzNkZjYxODI4YjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI3MGYyZTQ5MTA3NGMxYjk3MTY0OTJlY2NmMWI0MjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTUxNDk1NTA0NTMwOCwtNzMuODk4NTU2MzM2MzAzMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNiYWQ5YTY5ODg1NDBhYzhhZWMwNzQxZTg2NDJjMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWUwZjM4ZTQ4NDE3NDMyOWI1OTZiODI3OWJhMzc1MWQgPSAkKCc8ZGl2IGlkPSJodG1sXzFlMGYzOGU0ODQxNzQzMjliNTk2YjgyNzliYTM3NTFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZXJnZW4gQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzYmFkOWE2OTg4NTQwYWM4YWVjMDc0MWU4NjQyYzMyLnNldENvbnRlbnQoaHRtbF8xZTBmMzhlNDg0MTc0MzI5YjU5NmI4Mjc5YmEzNzUxZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYjcwZjJlNDkxMDc0YzFiOTcxNjQ5MmVjY2YxYjQyNS5iaW5kUG9wdXAocG9wdXBfNjNiYWQ5YTY5ODg1NDBhYzhhZWMwNzQxZTg2NDJjMzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmIyMmI5ODI0ZmY3NDI1OGE5ZDFkZjgyYThlMzAxN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjU1OTU4OTg2OTg0MywtNzMuOTU3NTk1MjM0ODk4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTc4YjZiMjkxNzE3NDEzZGJjYzBkNTA1MjI2MzNjODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQwNTM2YjVjNDUyNDJmZGIyZGNkNjdkMjVmOWYyNDQgPSAkKCc8ZGl2IGlkPSJodG1sXzk0MDUzNmI1YzQ1MjQyZmRiMmRjZDY3ZDI1ZjlmMjQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWR3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzhiNmIyOTE3MTc0MTNkYmNjMGQ1MDUyMjYzM2M4NC5zZXRDb250ZW50KGh0bWxfOTQwNTM2YjVjNDUyNDJmZGIyZGNkNjdkMjVmOWYyNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmIyMmI5ODI0ZmY3NDI1OGE5ZDFkZjgyYThlMzAxN2IuYmluZFBvcHVwKHBvcHVwXzE3OGI2YjI5MTcxNzQxM2RiY2MwZDUwNTIyNjMzYzg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjMGE4NTZkNzBjZDRjNTk4ZDllOWY1OWJkNjJjMWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ3MDA4NjAzMTg1MTg1LC03My45NjI2MTMxNjcxNjA0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjVlNmEyMTVhMjY0NWE3OTA0NTliZDhkMjRlODc3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NzMyOTlmOTBjYWI0ZDQwYjIwMTYxZjdlMjViYTgzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTczMjk5ZjkwY2FiNGQ0MGIyMDE2MWY3ZTI1YmE4MzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByb3NwZWN0IFBhcmsgU291dGg8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyNWU2YTIxNWEyNjQ1YTc5MDQ1OWJkOGQyNGU4Nzc3LnNldENvbnRlbnQoaHRtbF85NzMyOTlmOTBjYWI0ZDQwYjIwMTYxZjdlMjViYTgzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYzBhODU2ZDcwY2Q0YzU5OGQ5ZTlmNTliZDYyYzFmMC5iaW5kUG9wdXAocG9wdXBfYzI1ZTZhMjE1YTI2NDVhNzkwNDU5YmQ4ZDI0ZTg3NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjA0ODhiYTIzMzRlNDRkMjgxYTg2NTcwNDI0NzUwMzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjM4NDUyNDQ3ODQxOSwtNzMuOTE2MDc0ODM5NTEzMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTZhOTViNzE0NTM3NDZhYTgwOTg5M2ZkNWQwMmRhZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzM3NWE3ZWRiODI1NGZiMDhkNTM2NWJmMjVhYzQ3NTEgPSAkKCc8ZGl2IGlkPSJodG1sXzczNzVhN2VkYjgyNTRmYjA4ZDUzNjViZjI1YWM0NzUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HZW9yZ2V0b3duPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNmE5NWI3MTQ1Mzc0NmFhODA5ODkzZmQ1ZDAyZGFkZC5zZXRDb250ZW50KGh0bWxfNzM3NWE3ZWRiODI1NGZiMDhkNTM2NWJmMjVhYzQ3NTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjA0ODhiYTIzMzRlNDRkMjgxYTg2NTcwNDI0NzUwMzYuYmluZFBvcHVwKHBvcHVwX2U2YTk1YjcxNDUzNzQ2YWE4MDk4OTNmZDVkMDJkYWRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3YTQzYmE2N2FhMDRiYTZhMjBiNGZiM2IzNTc3MTcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4NDkyNDEwNDE1NDgsLTczLjkzODg1ODE1MjY5MTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhMDNhM2IwNTYxYTQ5MzA5YzIwYmFjOWRkMWEwN2I0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0OTliY2EyZjM0MTRmODQ4NTVjOGYzZjRkNTg5MjI5ID0gJCgnPGRpdiBpZD0iaHRtbF82NDk5YmNhMmYzNDE0Zjg0ODU1YzhmM2Y0ZDU4OTIyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBXaWxsaWFtc2J1cmc8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhMDNhM2IwNTYxYTQ5MzA5YzIwYmFjOWRkMWEwN2I0LnNldENvbnRlbnQoaHRtbF82NDk5YmNhMmYzNDE0Zjg0ODU1YzhmM2Y0ZDU4OTIyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83N2E0M2JhNjdhYTA0YmE2YTIwYjRmYjNiMzU3NzE3Mi5iaW5kUG9wdXAocG9wdXBfZmEwM2EzYjA1NjFhNDkzMDljMjBiYWM5ZGQxYTA3YjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjk2OTViYjEyMTZkNDJjMzgxZDQ0ODFmOTg2NzY4OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQ4MjI5MDY1MzIwMTQsLTczLjk1ODgwODU3NTg3NTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzODAwODhjOWI2MjRlN2U5YTZmY2QzOGU4NDA0YjM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkM2M3MjllZGNmNjQ0ZGJhMWU2Yzg4ODNjZmZjM2E1ID0gJCgnPGRpdiBpZD0iaHRtbF9iZDNjNzI5ZWRjZjY0NGRiYTFlNmM4ODgzY2ZmYzNhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGggU2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjM4MDA4OGM5YjYyNGU3ZTlhNmZjZDM4ZTg0MDRiMzguc2V0Q29udGVudChodG1sX2JkM2M3MjllZGNmNjQ0ZGJhMWU2Yzg4ODNjZmZjM2E1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI5Njk1YmIxMjE2ZDQyYzM4MWQ0NDgxZjk4Njc2ODhlLmJpbmRQb3B1cChwb3B1cF9iMzgwMDg4YzliNjI0ZTdlOWE2ZmNkMzhlODQwNGIzOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDZjZTUxZDUwYzM0ZjljOTkxNDA1ZjdmNGMwOTgwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMDg2MTQ3MjY1MDY0LC03My45NTgwMDA5NTE1MzMzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNWY0Yjc5OGNhMDU0ZDBkOTE1YjcyZjY0MDM5MGYwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82N2UyOWI3ODliNDk0NmU4YTlhMDdlYmU5NmM1NzIwMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjdlMjliNzg5YjQ5NDZlOGE5YTA3ZWJlOTZjNTcyMDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIFNpZGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1ZjRiNzk4Y2EwNTRkMGQ5MTViNzJmNjQwMzkwZjBkLnNldENvbnRlbnQoaHRtbF82N2UyOWI3ODliNDk0NmU4YTlhMDdlYmU5NmM1NzIwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZDZjZTUxZDUwYzM0ZjljOTkxNDA1ZjdmNGMwOTgwOS5iaW5kUG9wdXAocG9wdXBfMjVmNGI3OThjYTA1NGQwZDkxNWI3MmY2NDAzOTBmMGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmE3ZmUwZWYwYjBkNDFjMGIwMWNkYWM3OTY2NWUwOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTMwNTk3NjY2Nzk0MiwtNzMuOTY4MzY2NzgwMzU1NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTJjNDY5YzFjMmVjNGE5ZThjZGFkNmZlYTYwZjBkYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmU5Yjk4YmU3OWFlNDE3N2EyZDkzNjIzNTI1NTA1MDIgPSAkKCc8ZGl2IGlkPSJodG1sXzZlOWI5OGJlNzlhZTQxNzdhMmQ5MzYyMzUyNTUwNTAyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PY2VhbiBQYXJrd2F5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MmM0NjljMWMyZWM0YTllOGNkYWQ2ZmVhNjBmMGRjMC5zZXRDb250ZW50KGh0bWxfNmU5Yjk4YmU3OWFlNDE3N2EyZDkzNjIzNTI1NTA1MDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmE3ZmUwZWYwYjBkNDFjMGIwMWNkYWM3OTY2NWUwOWEuYmluZFBvcHVwKHBvcHVwXzkyYzQ2OWMxYzJlYzRhOWU4Y2RhZDZmZWE2MGYwZGMwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmNjFkYjQ5NDY5NTQyYjBhMTNmNTY5ZGU4MDYxZTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE0NzY4MTI2OTQyMjYsLTc0LjAzMTk3OTE0NTM3OTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0NWJlMWJhOGE0MjRjM2E5ODNlMjUxYTM2ODllYTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmMzYwODgwYjk0ODQxYzNiNTVmNmU0NjEyNmQyNDFjID0gJCgnPGRpdiBpZD0iaHRtbF8yZjM2MDg4MGI5NDg0MWMzYjU1ZjZlNDYxMjZkMjQxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9ydCBIYW1pbHRvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQ1YmUxYmE4YTQyNGMzYTk4M2UyNTFhMzY4OWVhODkuc2V0Q29udGVudChodG1sXzJmMzYwODgwYjk0ODQxYzNiNTVmNmU0NjEyNmQyNDFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmNjFkYjQ5NDY5NTQyYjBhMTNmNTY5ZGU4MDYxZTM4LmJpbmRQb3B1cChwb3B1cF8yNDViZTFiYThhNDI0YzNhOTgzZTI1MWEzNjg5ZWE4OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzVhZGNjODBhOWE0YzNjYTBjZjAzMjZiYmQ3ZDFkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY0MzY3NTE4MzM0MDk3NCwtNzMuOTYxMDEzMTI0NjY3NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM1YTc1MzhjMTBhNDRmZmJhODhkNjg1MGZiNmViNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDVhMmQ0OWVkNmUxNDYyNmE1YzNlZDhkY2Y1NTcyZjkgPSAkKCc8ZGl2IGlkPSJodG1sXzA1YTJkNDllZDZlMTQ2MjZhNWMzZWQ4ZGNmNTU3MmY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EaXRtYXMgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmM1YTc1MzhjMTBhNDRmZmJhODhkNjg1MGZiNmViNDguc2V0Q29udGVudChodG1sXzA1YTJkNDllZDZlMTQ2MjZhNWMzZWQ4ZGNmNTU3MmY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjNWFkY2M4MGE5YTRjM2NhMGNmMDMyNmJiZDdkMWQ0LmJpbmRQb3B1cChwb3B1cF82YzVhNzUzOGMxMGE0NGZmYmE4OGQ2ODUwZmI2ZWI0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YWZkZjAzZTgyNjI0YzE4YTkwNmI5Y2Y2NmQ3MWIyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2MDk0NjU2MTg4MTExLC03My45MzcxODY4MDU1OTMxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWFhZjE0NWQ2MWI0YTEzOTgzNmMzZWFhMDQzMmZjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Yjk1NDExZTVkODU0OTJhYWVlMjMyMDRjNWUzNWQ5YyA9ICQoJzxkaXYgaWQ9Imh0bWxfOWI5NTQxMWU1ZDg1NDkyYWFlZTIzMjA0YzVlMzVkOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbmdhdGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlYWFmMTQ1ZDYxYjRhMTM5ODM2YzNlYWEwNDMyZmNmLnNldENvbnRlbnQoaHRtbF85Yjk1NDExZTVkODU0OTJhYWVlMjMyMDRjNWUzNWQ5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YWZkZjAzZTgyNjI0YzE4YTkwNmI5Y2Y2NmQ3MWIyYy5iaW5kUG9wdXAocG9wdXBfN2VhYWYxNDVkNjFiNGExMzk4MzZjM2VhYTA0MzJmY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWJiM2E1MDIzMDM5NGU2OWIzNDM0OTI1ZjIyMzBhMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTU1NzIzMTMyODA3NjQsLTczLjkyNjg4MjEyNjE2OTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzNDI1YjE5ZWIyMTQ3NzJhNmI1NTMzYzdiNDAwNTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiM2NhYzczMmQzYjRmZjJiMmQ1M2M0NWNlMjdkODJjID0gJCgnPGRpdiBpZD0iaHRtbF8xYjNjYWM3MzJkM2I0ZmYyYjJkNTNjNDVjZTI3ZDgyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UnVnYnk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzNDI1YjE5ZWIyMTQ3NzJhNmI1NTMzYzdiNDAwNTUwLnNldENvbnRlbnQoaHRtbF8xYjNjYWM3MzJkM2I0ZmYyYjJkNTNjNDVjZTI3ZDgyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYmIzYTUwMjMwMzk0ZTY5YjM0MzQ5MjVmMjIzMGEwZC5iaW5kUG9wdXAocG9wdXBfNTM0MjViMTllYjIxNDc3MmE2YjU1MzNjN2I0MDA1NTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2I0OWI4ZDFhNTI5NGIwOTliNDQ0MWRmNDY3MWU4ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTIxMTc0NTE3OTM0OTQsLTczLjkxNjY1MzMxOTc4MDQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjZjI3MzNiNGIzYTRkYjU5MzVlN2JjNzg5YTZkYjgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0ODBmMDgzZjIwODQ3ZjZhMWQxNThiMDc2NWZjMWM5ID0gJCgnPGRpdiBpZD0iaHRtbF8xNDgwZjA4M2YyMDg0N2Y2YTFkMTU4YjA3NjVmYzFjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVtc2VuIFZpbGxhZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjZjI3MzNiNGIzYTRkYjU5MzVlN2JjNzg5YTZkYjgxLnNldENvbnRlbnQoaHRtbF8xNDgwZjA4M2YyMDg0N2Y2YTFkMTU4YjA3NjVmYzFjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YjQ5YjhkMWE1Mjk0YjA5OWI0NDQxZGY0NjcxZThkYy5iaW5kUG9wdXAocG9wdXBfOGNmMjczM2I0YjNhNGRiNTkzNWU3YmM3ODlhNmRiODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWQyNTRiZmUzYmIyNDNmZThmMzYwZGJjOTFmZTgyMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjI3NDQyNzk2OTY2LC03My44ODUxMTc3NjM3OTI5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmY0OTc0OGI2ODk0MzI3ODZhYzk5ZGQzMzdkY2YzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MmRjYzA5MWVlMjE0YmE3YTIyMTZkNGI3NTQ2MGNiYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDJkY2MwOTFlZTIxNGJhN2EyMjE2ZDRiNzU0NjBjYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBMb3RzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZmY0OTc0OGI2ODk0MzI3ODZhYzk5ZGQzMzdkY2YzMi5zZXRDb250ZW50KGh0bWxfNDJkY2MwOTFlZTIxNGJhN2EyMjE2ZDRiNzU0NjBjYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWQyNTRiZmUzYmIyNDNmZThmMzYwZGJjOTFmZTgyMjcuYmluZFBvcHVwKHBvcHVwXzBmZjQ5NzQ4YjY4OTQzMjc4NmFjOTlkZDMzN2RjZjMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NkZDZjODhiNTdjYzQxOWViZDM2ZDE3NWU5NzdlZTc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMxMzE3NTUwMzk2NjcsLTczLjkwMjMzNDc0Mjk1ODM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjZTg3OGQ3YjFiNDQ2M2Y5NDk2YTMxZDk2MmExNjIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5ZmUwYjE4NWRlNDRlODk5ZWE4MTA2ODUyNjY5YzQ0ID0gJCgnPGRpdiBpZD0iaHRtbF85OWZlMGIxODVkZTQ0ZTg5OWVhODEwNjg1MjY2OWM0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFlcmRlZ2F0IEJhc2luPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hY2U4NzhkN2IxYjQ0NjNmOTQ5NmEzMWQ5NjJhMTYyMC5zZXRDb250ZW50KGh0bWxfOTlmZTBiMTg1ZGU0NGU4OTllYTgxMDY4NTI2NjljNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2RkNmM4OGI1N2NjNDE5ZWJkMzZkMTc1ZTk3N2VlNzguYmluZFBvcHVwKHBvcHVwX2FjZTg3OGQ3YjFiNDQ2M2Y5NDk2YTMxZDk2MmExNjIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyMmQ4YjNmYTA5NjRiZjY4ZTYwZjFhNWMwMDRhMGQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE1OTc0MjM5NjIzMzYsLTczLjkxNTE1MzkxNTUwNDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhM2Y5ZGI1OGVkMjQ0ODU5MjczN2Y4MDM0YzkxZGVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkNTFlY2UwOGU2MTRlNDI5NDU3NDk2MzIxMzE1YTQxID0gJCgnPGRpdiBpZD0iaHRtbF81ZDUxZWNlMDhlNjE0ZTQyOTQ1NzQ5NjMyMTMxNWE0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlsbCBCYXNpbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWEzZjlkYjU4ZWQyNDQ4NTkyNzM3ZjgwMzRjOTFkZWQuc2V0Q29udGVudChodG1sXzVkNTFlY2UwOGU2MTRlNDI5NDU3NDk2MzIxMzE1YTQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyMmQ4YjNmYTA5NjRiZjY4ZTYwZjFhNWMwMDRhMGQ3LmJpbmRQb3B1cChwb3B1cF81YTNmOWRiNThlZDI0NDg1OTI3MzdmODAzNGM5MWRlZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGFlMjEyN2U5YjI0YjhkYTQ0MmIxMzczODUzZmRjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzI4MTA5MDkzMDE0LC03My45OTU1MDc1MTg4ODQxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNTcxMWU4OGQ3YTA0ZGMzOTVjYjE5Njk0ZTQzYmRjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYzBhOWU3ZDVlNzQ0NzM5YmYxZjAzMTAzMzNkZGQwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGMwYTllN2Q1ZTc0NDczOWJmMWYwMzEwMzMzZGRkMDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1bHRvbiBGZXJyeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU3MTFlODhkN2EwNGRjMzk1Y2IxOTY5NGU0M2JkYzIuc2V0Q29udGVudChodG1sX2RjMGE5ZTdkNWU3NDQ3MzliZjFmMDMxMDMzM2RkZDAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwYWUyMTI3ZTliMjRiOGRhNDQyYjEzNzM4NTNmZGNkLmJpbmRQb3B1cChwb3B1cF9jNTcxMWU4OGQ3YTA0ZGMzOTVjYjE5Njk0ZTQzYmRjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjZhNWJlNWY2MDc0YWMyYTE1ZDUzOTUwZmVlOGQ3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzMyMTQ5ODgyODc0LC03My45ODExMTYwMzU5MjM5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOWFiZjlhOWQzZTA0MWNlODdkYzhhNzYwZTg3Nzk2YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mN2VlYzg3YTUzZmU0NTkyYWNhZThiZDcyNWQ2YjVjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjdlZWM4N2E1M2ZlNDU5MmFjYWU4YmQ3MjVkNmI1YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZpbmVnYXIgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzlhYmY5YTlkM2UwNDFjZTg3ZGM4YTc2MGU4Nzc5NmMuc2V0Q29udGVudChodG1sX2Y3ZWVjODdhNTNmZTQ1OTJhY2FlOGJkNzI1ZDZiNWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2NmE1YmU1ZjYwNzRhYzJhMTVkNTM5NTBmZWU4ZDdkLmJpbmRQb3B1cChwb3B1cF9jOWFiZjlhOWQzZTA0MWNlODdkYzhhNzYwZTg3Nzk2Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YmZhZDE0NmQ2ODQ0M2RjOThmMGRlMGU4YjQ2MjM3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTAzOTg2NTAzMjM3LC03My45MzA1MzEwODgxNzMzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzA1NGVlZTJkYjk0MTkwYmMxMzYxNjU4NTllNmEyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kODllMzJiZDhhOGM0YzJhOGY5OWJjOTdmYTdmM2MwNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDg5ZTMyYmQ4YThjNGMyYThmOTliYzk3ZmE3ZjNjMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlZWtzdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjMDU0ZWVlMmRiOTQxOTBiYzEzNjE2NTg1OWU2YTI2LnNldENvbnRlbnQoaHRtbF9kODllMzJiZDhhOGM0YzJhOGY5OWJjOTdmYTdmM2MwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YmZhZDE0NmQ2ODQ0M2RjOThmMGRlMGU4YjQ2MjM3Mi5iaW5kUG9wdXAocG9wdXBfY2MwNTRlZWUyZGI5NDE5MGJjMTM2MTY1ODU5ZTZhMjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGRjMjg1OWZhYzQ3NDk4N2E1NWJhZmQ1OTA5NTAzMjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzc4NjEwNDc2OTUzMSwtNzMuOTAzMzE2ODQ4NTI1OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFlYWQ3MWE0N2YzNDIzY2JhMDI2MDA2ZjUyNGNiMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjlhN2U3ZmQ4YTM4NGE4NTk2MjFkZjNjZDA1YzczMjUgPSAkKCc8ZGl2IGlkPSJodG1sXzY5YTdlN2ZkOGEzODRhODU5NjIxZGYzY2QwNWM3MzI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSBKdW5jdGlvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFlYWQ3MWE0N2YzNDIzY2JhMDI2MDA2ZjUyNGNiMjUuc2V0Q29udGVudChodG1sXzY5YTdlN2ZkOGEzODRhODU5NjIxZGYzY2QwNWM3MzI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhkYzI4NTlmYWM0NzQ5ODdhNTViYWZkNTkwOTUwMzI0LmJpbmRQb3B1cChwb3B1cF8wMWVhZDcxYTQ3ZjM0MjNjYmEwMjYwMDZmNTI0Y2IyNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZWE4NzRhNGQ1Y2Q0Mjg2ODRlMGE3YjQwOGVjZWJmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzE3NjMyODIyNjkyLC03My45ODg3NTI4MDc0NTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4MWQ5MGQ2MjFhYjQ0YzJiNDQ5OTRjZmU1NGEyMWU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkNjI0OTNiNmVkMDQ4YWM5MDBiYmQxNWQ5NjQ1ODkxID0gJCgnPGRpdiBpZD0iaHRtbF9mZDYyNDkzYjZlZDA0OGFjOTAwYmJkMTVkOTY0NTg5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RHVtYm88L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4MWQ5MGQ2MjFhYjQ0YzJiNDQ5OTRjZmU1NGEyMWU1LnNldENvbnRlbnQoaHRtbF9mZDYyNDkzYjZlZDA0OGFjOTAwYmJkMTVkOTY0NTg5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZWE4NzRhNGQ1Y2Q0Mjg2ODRlMGE3YjQwOGVjZWJmZC5iaW5kUG9wdXAocG9wdXBfODgxZDkwZDYyMWFiNDRjMmI0NDk5NGNmZTU0YTIxZTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2U0ODViNGNhYjk0NGYxNmEyZTk2NDhlYjc1MjNkZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTg1MjUwOTUxMzcyNTUsLTczLjk1OTE4NDU5NDI4NzAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhM2ZkMDU1MDI1ZDRlYzJiYWJhZDM5NmMyMTllMjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5MzljZWJkZWJjYzQ3Y2FhOThmYjJiMTRjYzczMjYwID0gJCgnPGRpdiBpZD0iaHRtbF80OTM5Y2ViZGViY2M0N2NhYTk4ZmIyYjE0Y2M3MzI2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9tZWNyZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTNmZDA1NTAyNWQ0ZWMyYmFiYWQzOTZjMjE5ZTIwYi5zZXRDb250ZW50KGh0bWxfNDkzOWNlYmRlYmNjNDdjYWE5OGZiMmIxNGNjNzMyNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2U0ODViNGNhYjk0NGYxNmEyZTk2NDhlYjc1MjNkZmYuYmluZFBvcHVwKHBvcHVwX2FhM2ZkMDU1MDI1ZDRlYzJiYWJhZDM5NmMyMTllMjBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwOTg3NTIwYWNlODQ2NGU4NGVkYjQ3ZWU3MmRkYWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgxOTk4OTM0NTE3MywtNzMuODkwMzQ1NzA5ODcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDQ3MDFkYjVmZjRkNjU4NzM5MTc4NTFkYTNkMzRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxNjk0Njc1ZDJmZDQ5YTM4MzA1Y2I2MzhkODZiNDg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmYTVmOGFiNzAwMjRjODBiYWMyZTQ3OTYwMmVhYTI0ID0gJCgnPGRpdiBpZD0iaHRtbF85ZmE1ZjhhYjcwMDI0YzgwYmFjMmU0Nzk2MDJlYWEyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGlnaGxhbmQgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE2OTQ2NzVkMmZkNDlhMzgzMDVjYjYzOGQ4NmI0ODcuc2V0Q29udGVudChodG1sXzlmYTVmOGFiNzAwMjRjODBiYWMyZTQ3OTYwMmVhYTI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwOTg3NTIwYWNlODQ2NGU4NGVkYjQ3ZWU3MmRkYWI5LmJpbmRQb3B1cChwb3B1cF9lMTY5NDY3NWQyZmQ0OWEzODMwNWNiNjM4ZDg2YjQ4Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWY0ZTVkNzNiNzk0MzQ4YmY3OTFhMmM2ZTc1MTAxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwOTM3NzcwMTEzNzY2LC03My45NDg0MTUxNTMyODg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF8wODA0NzAxZGI1ZmY0ZDY1ODczOTE3ODUxZGEzZDM0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MWFiYTBmYzgyMDQ0ZDFkOWI2ZTQ5NjZlOGVlOWJlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTk5ZWRhMDI1ZGE0MjJkYWVlYjRiMzMwNTgxMzk2MyA9ICQoJzxkaXYgaWQ9Imh0bWxfMjE5OWVkYTAyNWRhNDIyZGFlZWI0YjMzMDU4MTM5NjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hZGlzb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxYWJhMGZjODIwNDRkMWQ5YjZlNDk2NmU4ZWU5YmVmLnNldENvbnRlbnQoaHRtbF8yMTk5ZWRhMDI1ZGE0MjJkYWVlYjRiMzMwNTgxMzk2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWY0ZTVkNzNiNzk0MzQ4YmY3OTFhMmM2ZTc1MTAxOC5iaW5kUG9wdXAocG9wdXBfNDFhYmEwZmM4MjA0NGQxZDliNmU0OTY2ZThlZTliZWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzE2Mjk2YWI5Mjc4NDc4YThhOGFlMTE2NzAxMmRjNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NDY5MjYwNjY1ODU3OSwtNzMuOTQ4MTc3MDk5MjAxODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwNDcwMWRiNWZmNGQ2NTg3MzkxNzg1MWRhM2QzNGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNlYzhmZGFlMjdiNGNiZDllYzg1MGYxMTAxNDRmYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZmNjg4Y2M2OTQ5NDA2OThiYTYwZmI1MWZhNWM0M2EgPSAkKCc8ZGl2IGlkPSJodG1sX2Y2ZjY4OGNjNjk0OTQwNjk4YmE2MGZiNTFmYTVjNDNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FcmFzbXVzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kY2VjOGZkYWUyN2I0Y2JkOWVjODUwZjExMDE0NGZjOC5zZXRDb250ZW50KGh0bWxfZjZmNjg4Y2M2OTQ5NDA2OThiYTYwZmI1MWZhNWM0M2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzE2Mjk2YWI5Mjc4NDc4YThhOGFlMTE2NzAxMmRjNWEuYmluZFBvcHVwKHBvcHVwX2RjZWM4ZmRhZTI3YjRjYmQ5ZWM4NTBmMTEwMTQ0ZmM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f16b593f518>"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create map of Manhattan using latitude and longitude values \n",
"print_map (brooklyn_data, zoom=10) \n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Borough</th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Queens</td>\n",
" <td>Astoria</td>\n",
" <td>40.768509</td>\n",
" <td>-73.915654</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Queens</td>\n",
" <td>Woodside</td>\n",
" <td>40.746349</td>\n",
" <td>-73.901842</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Queens</td>\n",
" <td>Jackson Heights</td>\n",
" <td>40.751981</td>\n",
" <td>-73.882821</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Queens</td>\n",
" <td>Elmhurst</td>\n",
" <td>40.744049</td>\n",
" <td>-73.881656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Queens</td>\n",
" <td>Howard Beach</td>\n",
" <td>40.654225</td>\n",
" <td>-73.838138</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Borough Neighborhood Latitude Longitude\n",
"0 Queens Astoria 40.768509 -73.915654\n",
"1 Queens Woodside 40.746349 -73.901842\n",
"2 Queens Jackson Heights 40.751981 -73.882821\n",
"3 Queens Elmhurst 40.744049 -73.881656\n",
"4 Queens Howard Beach 40.654225 -73.838138"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"queens_data = newyork_data[newyork_data['Borough'] == 'Queens'].reset_index(drop=True)\n",
"queens_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTAgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNDAuNzMwODYxOSwtNzMuOTg3MTU1OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfYTFiNzQ1NTY3ODNmNGNkZWIyNmE5YmM0OTgzZWZkYzkgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4OTM5MThiMTYxOTQ4NGJiMmQ0NjRkMGMxOWFhOWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4NTA4NTkzMzU0OTIsLTczLjkxNTY1Mzc0MzA0MjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxZGNhYTAwNDlmYjQwYTY5MTI5ZWEyZDdhNGZkOWE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5OGRkMDdjOTRjZDQ2OTU5YjU0MWJjNmYzNDdjYmNlID0gJCgnPGRpdiBpZD0iaHRtbF81OThkZDA3Yzk0Y2Q0Njk1OWI1NDFiYzZmMzQ3Y2JjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXN0b3JpYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzFkY2FhMDA0OWZiNDBhNjkxMjllYTJkN2E0ZmQ5YTYuc2V0Q29udGVudChodG1sXzU5OGRkMDdjOTRjZDQ2OTU5YjU0MWJjNmYzNDdjYmNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y4OTM5MThiMTYxOTQ4NGJiMmQ0NjRkMGMxOWFhOWUzLmJpbmRQb3B1cChwb3B1cF8zMWRjYWEwMDQ5ZmI0MGE2OTEyOWVhMmQ3YTRmZDlhNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OTZkMzQ2MTY1YTE0OTgwOTJjYjUwOTBkNmMyNWViMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NjM0OTA4ODYwMjIyLC03My45MDE4NDE2NjgzODI4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lODMyMjQ1YTU4N2Y0ZDE4OGNhOGM3M2ExOTBkMDcwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YzU5OTJlODJjY2U0YWE1YmYxNGU3N2I0N2EzZWI4NCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWM1OTkyZTgyY2NlNGFhNWJmMTRlNzdiNDdhM2ViODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvb2RzaWRlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODMyMjQ1YTU4N2Y0ZDE4OGNhOGM3M2ExOTBkMDcwOC5zZXRDb250ZW50KGh0bWxfOWM1OTkyZTgyY2NlNGFhNWJmMTRlNzdiNDdhM2ViODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjk2ZDM0NjE2NWExNDk4MDkyY2I1MDkwZDZjMjVlYjMuYmluZFBvcHVwKHBvcHVwX2U4MzIyNDVhNTg3ZjRkMTg4Y2E4YzczYTE5MGQwNzA4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjYTdmZTZlMjVjYzRhYzhiNWFiMjQyZDc5MGYwODFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUxOTgxMzgwMDczNjcsLTczLjg4MjgyMTA5MTY0MzY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNzc4YTQzNjAzYTQ0NzA5YmZmN2IzNjQ0ZTUxYjIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0Mzg4NDM3NzZhNDRjMTVhNDk3N2I0N2JkMTY0NjIwID0gJCgnPGRpdiBpZD0iaHRtbF81NDM4ODQzNzc2YTQ0YzE1YTQ5NzdiNDdiZDE2NDYyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmFja3NvbiBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZjc3OGE0MzYwM2E0NDcwOWJmZjdiMzY0NGU1MWIyMC5zZXRDb250ZW50KGh0bWxfNTQzODg0Mzc3NmE0NGMxNWE0OTc3YjQ3YmQxNjQ2MjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWNhN2ZlNmUyNWNjNGFjOGI1YWIyNDJkNzkwZjA4MWQuYmluZFBvcHVwKHBvcHVwX2JmNzc4YTQzNjAzYTQ0NzA5YmZmN2IzNjQ0ZTUxYjIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiMzc5MjMyZTkzYjQwNDg5NzI0MmUyZDhiODI1NWU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0MDQ4NTA1MTIyMDI0LC03My44ODE2NTYyMjI4ODM4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NGRhZDY5OGQ1YmQ0ZmZjYTI4OWU3OGJkMDMyMzhjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOTdkYjEzYjNhYjA0NjZiOTMyYjNlYTRhYmI2ZTJiYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZjk3ZGIxM2IzYWIwNDY2YjkzMmIzZWE0YWJiNmUyYmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVsbWh1cnN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NGRhZDY5OGQ1YmQ0ZmZjYTI4OWU3OGJkMDMyMzhjMC5zZXRDb250ZW50KGh0bWxfZjk3ZGIxM2IzYWIwNDY2YjkzMmIzZWE0YWJiNmUyYmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2IzNzkyMzJlOTNiNDA0ODk3MjQyZTJkOGI4MjU1ZTguYmluZFBvcHVwKHBvcHVwXzc0ZGFkNjk4ZDViZDRmZmNhMjg5ZTc4YmQwMzIzOGMwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhZmM0ZWJkMjg4MjRlMDFhYzVjMjA0MTgzNjM3MzgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjU0MjI1Mjc3Mzg0ODcsLTczLjgzODEzNzY0NjAwMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThjNTc5NGUxMjEyNDViZjhjZGM0MTFlNmMyMDYxMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjQxOGFhMjVjODA3NDMzNzhmNWExNWQ3ZjhmMGViODQgPSAkKCc8ZGl2IGlkPSJodG1sXzI0MThhYTI1YzgwNzQzMzc4ZjVhMTVkN2Y4ZjBlYjg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib3dhcmQgQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4YzU3OTRlMTIxMjQ1YmY4Y2RjNDExZTZjMjA2MTAzLnNldENvbnRlbnQoaHRtbF8yNDE4YWEyNWM4MDc0MzM3OGY1YTE1ZDdmOGYwZWI4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYWZjNGViZDI4ODI0ZTAxYWM1YzIwNDE4MzYzNzM4MC5iaW5kUG9wdXAocG9wdXBfOThjNTc5NGUxMjEyNDViZjhjZGM0MTFlNmMyMDYxMDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDNmYTc4MzNkMDdmNGE0ZjgwM2IyMWY4NTM1ODIxMmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDIzODE3NTAxNTY2NywtNzMuODU2ODI0OTczNDUyNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNkMTRlNmQxMzNlNGVjN2I1M2QwNmE3N2E2MDU5YmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGNlYTgzM2ZkNGRiNDEyNjkzZjUxYjgwZGNkOWY2N2UgPSAkKCc8ZGl2IGlkPSJodG1sXzhjZWE4MzNmZDRkYjQxMjY5M2Y1MWI4MGRjZDlmNjdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db3JvbmE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjZDE0ZTZkMTMzZTRlYzdiNTNkMDZhNzdhNjA1OWJjLnNldENvbnRlbnQoaHRtbF84Y2VhODMzZmQ0ZGI0MTI2OTNmNTFiODBkY2Q5ZjY3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wM2ZhNzgzM2QwN2Y0YTRmODAzYjIxZjg1MzU4MjEyYy5iaW5kUG9wdXAocG9wdXBfZGNkMTRlNmQxMzNlNGVjN2I1M2QwNmE3N2E2MDU5YmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODhiNzc3ZjFjODY0NGFmNDk1MTA1MmM1ZWJlODNmOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjUyNjM3ODIxNjUwMywtNzMuODQ0NDc1MDA3ODg5ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU5OTM4ZjRkNjRlNGQ2Zjk5YWQ3NWE3OWQzMDhhODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDY1ZmE1ODdkM2Q1NDJiZjkyM2NjNTkyMWFiNjliODMgPSAkKCc8ZGl2IGlkPSJodG1sXzA2NWZhNTg3ZDNkNTQyYmY5MjNjYzU5MjFhYjY5YjgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gb3Jlc3QgSGlsbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1OTkzOGY0ZDY0ZTRkNmY5OWFkNzVhNzlkMzA4YTgzLnNldENvbnRlbnQoaHRtbF8wNjVmYTU4N2QzZDU0MmJmOTIzY2M1OTIxYWI2OWI4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84OGI3NzdmMWM4NjQ0YWY0OTUxMDUyYzVlYmU4M2Y5Ny5iaW5kUG9wdXAocG9wdXBfZTU5OTM4ZjRkNjRlNGQ2Zjk5YWQ3NWE3OWQzMDhhODMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmRmNDM4ZTdlMzhkNDVhMmIwNDcxM2I5NTdlMzU0MjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDUxNzkwMzU0MTQ4LC03My44Mjk4MTkwNTgyNTcwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZWM4MzQ4OTU1ZGI0NWYzOTE2ODM3ZTJlZjJiYjMzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzM4ZWE3ODczNTA0YWM5YmMyZjQyMTg0MzE3ZDc1YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZTMzOGVhNzg3MzUwNGFjOWJjMmY0MjE4NDMxN2Q3NWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktldyBHYXJkZW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZWM4MzQ4OTU1ZGI0NWYzOTE2ODM3ZTJlZjJiYjMzNy5zZXRDb250ZW50KGh0bWxfZTMzOGVhNzg3MzUwNGFjOWJjMmY0MjE4NDMxN2Q3NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmRmNDM4ZTdlMzhkNDVhMmIwNDcxM2I5NTdlMzU0MjcuYmluZFBvcHVwKHBvcHVwX2JlYzgzNDg5NTVkYjQ1ZjM5MTY4MzdlMmVmMmJiMzM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiZjY4M2FlOTZmMzRhMGZhZTU5MDkyODlhZDYxYWExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk3OTQ3MzE0NzE3NjMsLTczLjgzMTgzMzIxNDQ2ODg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzYTYxYzQzZjUxNzQxZDVhNzI1YjM3ZjcwOGU2OGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmNGY2MTc0ZmE5MzQ4OTNiMTgxOTVkMWE1ZjgwMTk5ID0gJCgnPGRpdiBpZD0iaHRtbF9mZjRmNjE3NGZhOTM0ODkzYjE4MTk1ZDFhNWY4MDE5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmljaG1vbmQgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNhNjFjNDNmNTE3NDFkNWE3MjViMzdmNzA4ZTY4YWQuc2V0Q29udGVudChodG1sX2ZmNGY2MTc0ZmE5MzQ4OTNiMTgxOTVkMWE1ZjgwMTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiZjY4M2FlOTZmMzRhMGZhZTU5MDkyODlhZDYxYWExLmJpbmRQb3B1cChwb3B1cF9kM2E2MWM0M2Y1MTc0MWQ1YTcyNWIzN2Y3MDhlNjhhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82N2IzMjJkMmJiMzY0OGIyYmNkZjNjMzUyNmMyMDVkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDQ1NDE5Njk3ODQ2LC03My44MzE3NzMwMDMyOTU4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOGM0Y2U0YWQ0YmU0ZGI3YWU3NTRkMzllYzg5YzcyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDYzMDRlYTE0MDY0M2M0Yjc1MTQ2MTE5MjA4YTgxOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmQ2MzA0ZWExNDA2NDNjNGI3NTE0NjExOTIwOGE4MTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZsdXNoaW5nPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOGM0Y2U0YWQ0YmU0ZGI3YWU3NTRkMzllYzg5YzcyYy5zZXRDb250ZW50KGh0bWxfYmQ2MzA0ZWExNDA2NDNjNGI3NTE0NjExOTIwOGE4MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjdiMzIyZDJiYjM2NDhiMmJjZGYzYzM1MjZjMjA1ZGMuYmluZFBvcHVwKHBvcHVwX2I4YzRjZTRhZDRiZTRkYjdhZTc1NGQzOWVjODljNzJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1YWI3MGMzZTUwMzQyYTE5YTI1M2M2MzAwZmI4NzAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUwMjE3MzQ2MTA1MjgsLTczLjkzOTIwMjIzOTE1NTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkOWFhMDFhNDMwZDRmZjA4YzczNTNmODc2MDE5NjAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2M2VkYTM3ZGJjNTQ1MzJiYjI0MDFjZGFjZWVjNTI1ID0gJCgnPGRpdiBpZD0iaHRtbF9lNjNlZGEzN2RiYzU0NTMyYmIyNDAxY2RhY2VlYzUyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG9uZyBJc2xhbmQgQ2l0eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2Q5YWEwMWE0MzBkNGZmMDhjNzM1M2Y4NzYwMTk2MDEuc2V0Q29udGVudChodG1sX2U2M2VkYTM3ZGJjNTQ1MzJiYjI0MDFjZGFjZWVjNTI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1YWI3MGMzZTUwMzQyYTE5YTI1M2M2MzAwZmI4NzAwLmJpbmRQb3B1cChwb3B1cF8zZDlhYTAxYTQzMGQ0ZmYwOGM3MzUzZjg3NjAxOTYwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NjhlM2ZlMjViYzY0YjJlODExMjljMmVhYzk5NTc3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDE3NjI4MzUxOTI0LC03My45MjY5MTYxNzU2MTU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZGI3MGI3MjQ1ODY0NmI3YjM5ZTBhMjM3NzEzMDNiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZDY4NmU2MzBkODE0ODI4OTYwMWU0ZjcyYTA1MWYwNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMWQ2ODZlNjMwZDgxNDgyODk2MDFlNGY3MmEwNTFmMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1bm55c2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRiNzBiNzI0NTg2NDZiN2IzOWUwYTIzNzcxMzAzYjMuc2V0Q29udGVudChodG1sXzFkNjg2ZTYzMGQ4MTQ4Mjg5NjAxZTRmNzJhMDUxZjA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2OGUzZmUyNWJjNjRiMmU4MTEyOWMyZWFjOTk1NzczLmJpbmRQb3B1cChwb3B1cF84ZGI3MGI3MjQ1ODY0NmI3YjM5ZTBhMjM3NzEzMDNiMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NDIzODYxN2UzZTc0NTgwOWJmNDZkZDg0ODliNTU3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDA3MzIzODgzMDkxLC03My44NjcwNDE0NzY1ODc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMTM3NGQzY2U2M2M0YmQ5YTJhOWVkMGY3YjZiOTIwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZjgzYWE1ZTFmNjE0ZjMyOWM4YjA0YjVlNjE4NWIzMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNmY4M2FhNWUxZjYxNGYzMjljOGIwNGI1ZTYxODViMzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVhc3QgRWxtaHVyc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxMzc0ZDNjZTYzYzRiZDlhMmE5ZWQwZjdiNmI5MjA5LnNldENvbnRlbnQoaHRtbF82ZjgzYWE1ZTFmNjE0ZjMyOWM4YjA0YjVlNjE4NWIzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDIzODYxN2UzZTc0NTgwOWJmNDZkZDg0ODliNTU3Ny5iaW5kUG9wdXAocG9wdXBfZTEzNzRkM2NlNjNjNGJkOWEyYTllZDBmN2I2YjkyMDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWRmOGJmZWZhZjZmNDQ4MjkwNWIwN2YwZWRlNjZmNTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjU0MjczNzQwOTM2MDYsLTczLjg5NjIxNzEzNjI2ODU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjMDdhNjg5MGZmMzQ4MTM4M2FhNTc3ZTYwYjk2ZDg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNlZWU3MjBmMWU5MDQxZjhhOTBkOGU3Nzg4Mjk1MDdiID0gJCgnPGRpdiBpZD0iaHRtbF8zZWVlNzIwZjFlOTA0MWY4YTkwZDhlNzc4ODI5NTA3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFzcGV0aDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmMwN2E2ODkwZmYzNDgxMzgzYWE1NzdlNjBiOTZkODQuc2V0Q29udGVudChodG1sXzNlZWU3MjBmMWU5MDQxZjhhOTBkOGU3Nzg4Mjk1MDdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VkZjhiZmVmYWY2ZjQ0ODI5MDViMDdmMGVkZTY2ZjU1LmJpbmRQb3B1cChwb3B1cF9mYzA3YTY4OTBmZjM0ODEzODNhYTU3N2U2MGI5NmQ4NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjk0OTBjMzgxOWQ0Mzk5YWM4OTU3ZDJiN2FkYTgzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwODMyMzE1NjEzODU4LC03My45MDE0MzUxNzU1OTU4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzZhNjVlZGZjZGQ0NjhiOTFlOTFkNmMxMjliMDI1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYmU3ZDE3NTg4ZTY0ZDhiYjRiNWVhMzA1YzViZWQyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGJlN2QxNzU4OGU2NGQ4YmI0YjVlYTMwNWM1YmVkMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpZGdld29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjM2YTY1ZWRmY2RkNDY4YjkxZTkxZDZjMTI5YjAyNWMuc2V0Q29udGVudChodG1sX2RiZTdkMTc1ODhlNjRkOGJiNGI1ZWEzMDVjNWJlZDJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyOTQ5MGMzODE5ZDQzOTlhYzg5NTdkMmI3YWRhODNhLmJpbmRQb3B1cChwb3B1cF8yMzZhNjVlZGZjZGQ0NjhiOTFlOTFkNmMxMjliMDI1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jODg0OGIxZjAzZWU0ZmFhYmFkMTdmNDNhM2MxNzVlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMjc2MjQyOTY3ODM4LC03My44NzA3NDE2NzQzNTYwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZTBjNWE5ZGJjYjk0MGYwYTFjNWQ1YTFkM2FlMDJlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzA5NzNlZTEzOGE0ZDI1ODc0NDU2NTFlNmZjZmZmOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZWMwOTczZWUxMzhhNGQyNTg3NDQ1NjUxZTZmY2ZmZjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdsZW5kYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZTBjNWE5ZGJjYjk0MGYwYTFjNWQ1YTFkM2FlMDJlOS5zZXRDb250ZW50KGh0bWxfZWMwOTczZWUxMzhhNGQyNTg3NDQ1NjUxZTZmY2ZmZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzg4NDhiMWYwM2VlNGZhYWJhZDE3ZjQzYTNjMTc1ZTUuYmluZFBvcHVwKHBvcHVwX2ZlMGM1YTlkYmNiOTQwZjBhMWM1ZDVhMWQzYWUwMmU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwNDRmYTljZGNiMTRhNzNiMmU0YmVmYmNmNzA5ZDIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI4OTc0MDk0ODA3MzUsLTczLjg1NzgyNjg2OTA1MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTFhOGQ5YTVlNDc3NGFlY2I4MDc0MjFhNTY3M2I2MDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjY3MTI1NjRjODg4NGJkM2IxYTc1ODc0ZjZkOWMxZWUgPSAkKCc8ZGl2IGlkPSJodG1sX2Y2NzEyNTY0Yzg4ODRiZDNiMWE3NTg3NGY2ZDljMWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SZWdvIFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExYThkOWE1ZTQ3NzRhZWNiODA3NDIxYTU2NzNiNjAzLnNldENvbnRlbnQoaHRtbF9mNjcxMjU2NGM4ODg0YmQzYjFhNzU4NzRmNmQ5YzFlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMDQ0ZmE5Y2RjYjE0YTczYjJlNGJlZmJjZjcwOWQyMi5iaW5kUG9wdXAocG9wdXBfYTFhOGQ5YTVlNDc3NGFlY2I4MDc0MjFhNTY3M2I2MDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYThiNTViNmYzY2E4NDc2NWI2NDJlNDkzZTEyYTE4YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODk4ODY4NzkxNTc4OSwtNzMuODU4MTEwNDY1NTQzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZTJiMWViNThlZGQ0MzQzYTg1YmY2OTE0Y2M4MTUyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTk3NmEzZjJlNTI0NTVkYWMwNzllYWY2Yzg3NGQ5MCA9ICQoJzxkaXYgaWQ9Imh0bWxfYTk5NzZhM2YyZTUyNDU1ZGFjMDc5ZWFmNmM4NzRkOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvb2RoYXZlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmUyYjFlYjU4ZWRkNDM0M2E4NWJmNjkxNGNjODE1Mjcuc2V0Q29udGVudChodG1sX2E5OTc2YTNmMmU1MjQ1NWRhYzA3OWVhZjZjODc0ZDkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4YjU1YjZmM2NhODQ3NjViNjQyZTQ5M2UxMmExOGE4LmJpbmRQb3B1cChwb3B1cF82ZTJiMWViNThlZGQ0MzQzYTg1YmY2OTE0Y2M4MTUyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDRiZTE1NDBhNjI0NGViOTRiNjM1ZmYwZjY1YTQ4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDcwODQ2ODI2NTQxNSwtNzMuODQzMjAyNjYxNzM0NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODk0ZWI0YTU0YzJiNDg5OTk0ODllNTBiODRjZGNlOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzczNGEwMmRiZjgzNGViNGIwYzk3ZjJmMDRlNWQ2NjggPSAkKCc8ZGl2IGlkPSJodG1sX2M3MzRhMDJkYmY4MzRlYjRiMGM5N2YyZjA0ZTVkNjY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Pem9uZSBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTRlYjRhNTRjMmI0ODk5OTQ4OWU1MGI4NGNkY2U4ZS5zZXRDb250ZW50KGh0bWxfYzczNGEwMmRiZjgzNGViNGIwYzk3ZjJmMDRlNWQ2NjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTA0YmUxNTQwYTYyNDRlYjk0YjYzNWZmMGY2NWE0OGIuYmluZFBvcHVwKHBvcHVwXzg5NGViNGE1NGMyYjQ4OTk5NDg5ZTUwYjg0Y2RjZThlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxOThlNGNjOTgwYjQ1MmU4NzZjM2FiMmM3ZDIzNTM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4NTQ5NTc3NjcxOTUsLTczLjgwOTg2NDc4NjQ5MDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2MTcyYzIzMDQ2YjQ4NTNhMWMwNzIxM2U4YTQ2YTE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1NjAyOTUwMWVlYjQ0YzhiOGM5NjRkMjBhN2U5NTJmID0gJCgnPGRpdiBpZD0iaHRtbF84NTYwMjk1MDFlZWI0NGM4YjhjOTY0ZDIwYTdlOTUyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGggT3pvbmUgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODYxNzJjMjMwNDZiNDg1M2ExYzA3MjEzZThhNDZhMTYuc2V0Q29udGVudChodG1sXzg1NjAyOTUwMWVlYjQ0YzhiOGM5NjRkMjBhN2U5NTJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxOThlNGNjOTgwYjQ1MmU4NzZjM2FiMmM3ZDIzNTM2LmJpbmRQb3B1cChwb3B1cF84NjE3MmMyMzA0NmI0ODUzYTFjMDcyMTNlOGE0NmExNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84N2JkNzlhMzEzMzg0MzdkOTBiMTAzZTZlNWU3MGNjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NDkwMjc0OTI2MDIwNSwtNzMuODQzMDQ1Mjg4OTYxMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmYyNWY5YjlhMjIxNGI1ZmEyZWZlZWNkOTMyMjJkMDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2YzNzZhODE2NTVhNDVmMjk2NWVhMDQyNmIyMTQ0NmIgPSAkKCc8ZGl2IGlkPSJodG1sXzdmMzc2YTgxNjU1YTQ1ZjI5NjVlYTA0MjZiMjE0NDZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2xsZWdlIFBvaW50PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZjI1ZjliOWEyMjE0YjVmYTJlZmVlY2Q5MzIyMmQwNi5zZXRDb250ZW50KGh0bWxfN2YzNzZhODE2NTVhNDVmMjk2NWVhMDQyNmIyMTQ0NmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODdiZDc5YTMxMzM4NDM3ZDkwYjEwM2U2ZTVlNzBjYzIuYmluZFBvcHVwKHBvcHVwX2JmMjVmOWI5YTIyMTRiNWZhMmVmZWVjZDkzMjIyZDA2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5Yjc0M2Y1YTJkNDRhZDliNTcyNDIzMWFiOTViNTY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgxMjkwNzY2MDI2OTQsLTczLjgxNDIwMjE2NjEwODYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmNjQzOTNmZDBmNjQ4YTlhZjJmNjNlYWZjYzRhYmUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxZWZkN2IxYzEwMzQyZDg5M2MwZDI1MTU3YTAyMjI5ID0gJCgnPGRpdiBpZD0iaHRtbF9iMWVmZDdiMWMxMDM0MmQ4OTNjMGQyNTE1N2EwMjIyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2hpdGVzdG9uZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGY2NDM5M2ZkMGY2NDhhOWFmMmY2M2VhZmNjNGFiZTIuc2V0Q29udGVudChodG1sX2IxZWZkN2IxYzEwMzQyZDg5M2MwZDI1MTU3YTAyMjI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5Yjc0M2Y1YTJkNDRhZDliNTcyNDIzMWFiOTViNTY5LmJpbmRQb3B1cChwb3B1cF84ZjY0MzkzZmQwZjY0OGE5YWYyZjYzZWFmY2M0YWJlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjg2NGQxYTU0NGU0M2RjODUxNmMyZGFiNTYxNGMwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NjA0MDYzMjgxMDY0LC03My43NzQyNzM2MzA2ODY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhZTBiYmMzN2EyODRkZmY5NjgxOGNiNDY5YmUwMzBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4NTQxZTBjNGRjODQ0NTg5NGVmZTBkNTg5Y2IxMzA0ID0gJCgnPGRpdiBpZD0iaHRtbF8yODU0MWUwYzRkYzg0NDU4OTRlZmUwZDU4OWNiMTMwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF5c2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFlMGJiYzM3YTI4NGRmZjk2ODE4Y2I0NjliZTAzMGMuc2V0Q29udGVudChodG1sXzI4NTQxZTBjNGRjODQ0NTg5NGVmZTBkNTg5Y2IxMzA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiODY0ZDFhNTQ0ZTQzZGM4NTE2YzJkYWI1NjE0YzBmLmJpbmRQb3B1cChwb3B1cF9kYWUwYmJjMzdhMjg0ZGZmOTY4MThjYjQ2OWJlMDMwYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MzNkMzhkOWRjM2E0NWFiYjBiOGIxMjg3MTdmMjViOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MTcyOTU0OTAzMjYyLC03My43OTE3NjI0MzcyODA2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MTE1ZmM3OGYxMDY0M2NmYjNmODRmMjI4Y2VkN2NjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjE1YmRmOTc0Y2U0NzlhYWRlMTQzNDk1M2E3MWVjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTYxNWJkZjk3NGNlNDc5YWFkZTE0MzQ5NTNhNzFlYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkF1YnVybmRhbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxMTVmYzc4ZjEwNjQzY2ZiM2Y4NGYyMjhjZWQ3Y2NmLnNldENvbnRlbnQoaHRtbF8xNjE1YmRmOTc0Y2U0NzlhYWRlMTQzNDk1M2E3MWVjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MzNkMzhkOWRjM2E0NWFiYjBiOGIxMjg3MTdmMjViOC5iaW5kUG9wdXAocG9wdXBfNjExNWZjNzhmMTA2NDNjZmIzZjg0ZjIyOGNlZDdjY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmFmZDYwYmQ4ZGM5NDhkOTkxN2EyOTJiYmZiZGVmODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzA4MjYxOTI4MjY3LC03My43Mzg4OTc3NTU4MDc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmNDFhNmE2ZTU5MTQ5ZjZiN2QyNTRiOGEwODY5MDk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4OGFjOGUwZWZlMjQ4MjZhNDM1YTE0Y2EzYTA5MjBlID0gJCgnPGRpdiBpZD0iaHRtbF8yODhhYzhlMGVmZTI0ODI2YTQzNWExNGNhM2EwOTIwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGl0dGxlIE5lY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmNDFhNmE2ZTU5MTQ5ZjZiN2QyNTRiOGEwODY5MDk1LnNldENvbnRlbnQoaHRtbF8yODhhYzhlMGVmZTI0ODI2YTQzNWExNGNhM2EwOTIwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYWZkNjBiZDhkYzk0OGQ5OTE3YTI5MmJiZmJkZWY4OS5iaW5kUG9wdXAocG9wdXBfN2Y0MWE2YTZlNTkxNDlmNmI3ZDI1NGI4YTA4NjkwOTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFlNjQ0YjVmNjYzNGY1NGE5YjUwNzY5YWVhZmU0ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjY4NDYwOTc5MDc2MywtNzMuNzQyNDk4MjA3MjczM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjk0YzY1NjNiNjU0ZjI0OGMwNmQwZmExZDY5NmNiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84Yjk5ODU2MTg2NzQ0OGQyYjM2MGQ5YTdmNmZmOGJjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGI5OTg1NjE4Njc0NDhkMmIzNjBkOWE3ZjZmZjhiY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRvdWdsYXN0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZmOTRjNjU2M2I2NTRmMjQ4YzA2ZDBmYTFkNjk2Y2JhLnNldENvbnRlbnQoaHRtbF84Yjk5ODU2MTg2NzQ0OGQyYjM2MGQ5YTdmNmZmOGJjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YWU2NDRiNWY2NjM0ZjU0YTliNTA3NjlhZWFmZTRkYS5iaW5kUG9wdXAocG9wdXBfZmY5NGM2NTYzYjY1NGYyNDhjMDZkMGZhMWQ2OTZjYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDEyMDU3YjQzNjg0NDEwNmI1ZWVjNTM1YzM1ODJmZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDk0NDA3OTk3NDMzMiwtNzMuNzE1NDgxMTg5OTkxNDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWRjMmFkNDgwZjdmNDM2Yjk4NmU2MGEzZDE3OGU0NDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNjNmYxOTMwYTZlNGI5ZTk5NDI0YWQzYzgwMTllZTYgPSAkKCc8ZGl2IGlkPSJodG1sXzEzYzZmMTkzMGE2ZTRiOWU5OTQyNGFkM2M4MDE5ZWU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HbGVuIE9ha3M8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkYzJhZDQ4MGY3ZjQzNmI5ODZlNjBhM2QxNzhlNDQyLnNldENvbnRlbnQoaHRtbF8xM2M2ZjE5MzBhNmU0YjllOTk0MjRhZDNjODAxOWVlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MTIwNTdiNDM2ODQ0MTA2YjVlZWM1MzVjMzU4MmZkNy5iaW5kUG9wdXAocG9wdXBfOWRjMmFkNDgwZjdmNDM2Yjk4NmU2MGEzZDE3OGU0NDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmI5Mzg0YjI0NjhkNDU1M2E1MjEyNTc5MGJhODdhNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjg1NzMxODE3NjY3NSwtNzMuNzIwMTI4MTQ4MjY5MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzliYzU2NDM3NjQ5NDdjNmEwODA4N2M2ZDNjMDc2MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQ5Y2I2ZWRhMjIwNDI5M2I1YzgxM2U5NDc0YTljODIgPSAkKCc8ZGl2IGlkPSJodG1sX2E0OWNiNmVkYTIyMDQyOTNiNWM4MTNlOTQ3NGE5YzgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZWxsZXJvc2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5YmM1NjQzNzY0OTQ3YzZhMDgwODdjNmQzYzA3NjM4LnNldENvbnRlbnQoaHRtbF9hNDljYjZlZGEyMjA0MjkzYjVjODEzZTk0NzRhOWM4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYjkzODRiMjQ2OGQ0NTUzYTUyMTI1NzkwYmE4N2E1Yi5iaW5kUG9wdXAocG9wdXBfMzliYzU2NDM3NjQ5NDdjNmEwODA4N2M2ZDNjMDc2MzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzFiYTU5NGQxMTFjNDMzY2FhZjQ1MjQ0OGM0NTczMzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjI1NzgyNDQyMjgwNDYsLTczLjgyMDg3NzY0OTMzNTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhNWJhN2Q5NGYwZjQ3OTM5MWU0M2RhZjVjNTE1ODlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EwMzJlMjIyNTEzOTRlM2NhZTFjYjUzNjcwZmM0YjhmID0gJCgnPGRpdiBpZD0iaHRtbF9hMDMyZTIyMjUxMzk0ZTNjYWUxY2I1MzY3MGZjNGI4ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2V3IEdhcmRlbnMgSGlsbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhNWJhN2Q5NGYwZjQ3OTM5MWU0M2RhZjVjNTE1ODlkLnNldENvbnRlbnQoaHRtbF9hMDMyZTIyMjUxMzk0ZTNjYWUxY2I1MzY3MGZjNGI4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMWJhNTk0ZDExMWM0MzNjYWFmNDUyNDQ4YzQ1NzMzNS5iaW5kUG9wdXAocG9wdXBfMmE1YmE3ZDk0ZjBmNDc5MzkxZTQzZGFmNWM1MTU4OWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTczYjYwMTVmMmRmNGRmMWE4YjVhMmRjMzYwODU5NWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzQzOTQ0NjUzMzEzLC03My43ODI3MTMzNzAwMzI2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MTgzYzllMjg1OWI0OWYzYWFiNDFiZTI2MTc0NGJlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MGRhZWJkOWZmODA0MzA0YTc3ZTMwNjEzNmJiYTE4NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNDBkYWViZDlmZjgwNDMwNGE3N2UzMDYxMzZiYmExODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyZXNoIE1lYWRvd3M8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxODNjOWUyODU5YjQ5ZjNhYWI0MWJlMjYxNzQ0YmVjLnNldENvbnRlbnQoaHRtbF80MGRhZWJkOWZmODA0MzA0YTc3ZTMwNjEzNmJiYTE4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NzNiNjAxNWYyZGY0ZGYxYThiNWEyZGMzNjA4NTk1Yy5iaW5kUG9wdXAocG9wdXBfOTE4M2M5ZTI4NTliNDlmM2FhYjQxYmUyNjE3NDRiZWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjhkZjYwYjY0OWZmNDZkMTgzNmU0MzZiZjMyYWFlZGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTA5MzU0NzI1MjI3MSwtNzMuODExNzQ4MjI0NTg2MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ0YjIxNTEwMzIwNDBlYmI5YmU2NjYxMjgwNDc1MDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI5MGY5YmVjMjViNDU3MmJmMWYyMjA0NTI1ZTMzOGIgPSAkKCc8ZGl2IGlkPSJodG1sXzFiOTBmOWJlYzI1YjQ1NzJiZjFmMjIwNDUyNWUzMzhiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccmlhcndvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0NGIyMTUxMDMyMDQwZWJiOWJlNjY2MTI4MDQ3NTAxLnNldENvbnRlbnQoaHRtbF8xYjkwZjliZWMyNWI0NTcyYmYxZjIyMDQ1MjVlMzM4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOGRmNjBiNjQ5ZmY0NmQxODM2ZTQzNmJmMzJhYWVkZC5iaW5kUG9wdXAocG9wdXBfOTQ0YjIxNTEwMzIwNDBlYmI5YmU2NjYxMjgwNDc1MDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTJiOGM3ZWNhODg2NDFjYzliZTU5NDJhMzhkY2U1YWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDQ2NTczNjA2ODcxNywtNzMuNzk2OTAxNjU4ODgyODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjBjNzc1ZGY0YjkyNGVlOGE4NTBkNjlkNWFhNDJmNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTc4Nzk3NDQ3ZTQ5NGFiMGEwOWEyNTdkZWUxMjRmZWQgPSAkKCc8ZGl2IGlkPSJodG1sXzE3ODc5NzQ0N2U0OTRhYjBhMDlhMjU3ZGVlMTI0ZmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYW1haWNhIENlbnRlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjBjNzc1ZGY0YjkyNGVlOGE4NTBkNjlkNWFhNDJmNzAuc2V0Q29udGVudChodG1sXzE3ODc5NzQ0N2U0OTRhYjBhMDlhMjU3ZGVlMTI0ZmVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyYjhjN2VjYTg4NjQxY2M5YmU1OTQyYTM4ZGNlNWFlLmJpbmRQb3B1cChwb3B1cF9iMGM3NzVkZjRiOTI0ZWU4YTg1MGQ2OWQ1YWE0MmY3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWRhMTVmNzQ3MTE0OTdiYWE3MDQyMWNkZmQyMTI2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NTYxODU3MTQxODU1LC03My43NTQ5NDk3NjIzNDMzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOTcwNjQ4NzQ3MTU0ODQyYWQzODczODdiMTM4NmRiMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYzFjYzkxNWM4NDI0YWNiOGU2NDU0MmNkZjcwZGJiNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGMxY2M5MTVjODQyNGFjYjhlNjQ1NDJjZGY3MGRiYjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9ha2xhbmQgR2FyZGVuczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk3MDY0ODc0NzE1NDg0MmFkMzg3Mzg3YjEzODZkYjAuc2V0Q29udGVudChodG1sXzBjMWNjOTE1Yzg0MjRhY2I4ZTY0NTQyY2RmNzBkYmI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y5ZGExNWY3NDcxMTQ5N2JhYTcwNDIxY2RmZDIxMjY2LmJpbmRQb3B1cChwb3B1cF9mOTcwNjQ4NzQ3MTU0ODQyYWQzODczODdiMTM4NmRiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNWIyMTNhYWU2NDY0NDE2OGI5ODBmYTZmN2MyMzBjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxODg5MzA5MjE2NzM1NiwtNzMuNzM4NzE0ODQ1Nzg0MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVjODAzNTM4MGRlNDllY2IxOTdjMjgxNDI3MzA2ZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmE4NTgyMzYyMzRlNGYwMGI4OTczNDUzMDJiOTk4MTAgPSAkKCc8ZGl2IGlkPSJodG1sXzJhODU4MjM2MjM0ZTRmMDBiODk3MzQ1MzAyYjk5ODEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5RdWVlbnMgVmlsbGFnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDVjODAzNTM4MGRlNDllY2IxOTdjMjgxNDI3MzA2ZjUuc2V0Q29udGVudChodG1sXzJhODU4MjM2MjM0ZTRmMDBiODk3MzQ1MzAyYjk5ODEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E1YjIxM2FhZTY0NjQ0MTY4Yjk4MGZhNmY3YzIzMGNjLmJpbmRQb3B1cChwb3B1cF9kNWM4MDM1MzgwZGU0OWVjYjE5N2MyODE0MjczMDZmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjljMTVkN2RmNzk0Mzc3YmM2YWYyOTkzMDI2MWE3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTI0MzQ0MTkxOTA0LC03My43NTkyNTAwOTMzNTU5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDIwMTA1MDg0NTA0N2IwODg4ZTFhZWY2Y2RmZThkMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjdhODA0MWIwYTU0YjkyOTUyZjJjZTViNWU2MzE4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzI3YTgwNDFiMGE1NGI5Mjk1MmYyY2U1YjVlNjMxODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxpczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDAyMDEwNTA4NDUwNDdiMDg4OGUxYWVmNmNkZmU4ZDMuc2V0Q29udGVudChodG1sXzMyN2E4MDQxYjBhNTRiOTI5NTJmMmNlNWI1ZTYzMTg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBiOWMxNWQ3ZGY3OTQzNzdiYzZhZjI5OTMwMjYxYTc1LmJpbmRQb3B1cChwb3B1cF9kMDIwMTA1MDg0NTA0N2IwODg4ZTFhZWY2Y2RmZThkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTFhOGFjM2FkZGM0MzFkYTIyMDYyMWFkZDRhM2U5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NjkxMTI1Mzc4OTg4NSwtNzMuNzkwNDI2MTMxMzU1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDUzZGU1YzliMzc0NmFjYThjZGRkMzk5YWYyMDk5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNmEzMWNmNWRiNWI0ZmM0YTVlZTZiM2RhZjZkNWJhNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzZhMzFjZjVkYjViNGZjNGE1ZWU2YjNkYWY2ZDViYTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIEphbWFpY2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkNTNkZTVjOWIzNzQ2YWNhOGNkZGQzOTlhZjIwOTk1LnNldENvbnRlbnQoaHRtbF8zNmEzMWNmNWRiNWI0ZmM0YTVlZTZiM2RhZjZkNWJhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYTFhOGFjM2FkZGM0MzFkYTIyMDYyMWFkZDRhM2U5Ni5iaW5kUG9wdXAocG9wdXBfMmQ1M2RlNWM5YjM3NDZhY2E4Y2RkZDM5OWFmMjA5OTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk4ODdlNDI2MDJhNDYwZThkODQwODg3NmUzOGRmZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTQ0NDUzODUyMjM1OSwtNzMuNzU4Njc2MDM3Mjc3MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Y1NWE1ZWJhN2UyNDQxN2I2YjA1OTc5OGEyMTVkMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2VkZDNlZjM0ZTBhNDAyMDk1MzYzYTA0MWQ2YWYwNGQgPSAkKCc8ZGl2IGlkPSJodG1sX2NlZGQzZWYzNGUwYTQwMjA5NTM2M2EwNDFkNmFmMDRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gQWxiYW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZjU1YTVlYmE3ZTI0NDE3YjZiMDU5Nzk4YTIxNWQxYi5zZXRDb250ZW50KGh0bWxfY2VkZDNlZjM0ZTBhNDAyMDk1MzYzYTA0MWQ2YWYwNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzk4ODdlNDI2MDJhNDYwZThkODQwODg3NmUzOGRmZmQuYmluZFBvcHVwKHBvcHVwX2NmNTVhNWViYTdlMjQ0MTdiNmIwNTk3OThhMjE1ZDFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzMTFlOWJkOTAwNDQwMTE4ZWRhNDIwOWFmOGI0YjY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc1MjExMzk1OTE3MzMsLTczLjc3MjU4Nzg3NjIwOTA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkZGNlNzkxNzhlMDRmZjQ5YTFmMDYzZjQ4NDY1MzRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5YTBhNDU4NDU1ODRhYmU4OGExZmFiZjhmMzJmNzEzID0gJCgnPGRpdiBpZD0iaHRtbF84OWEwYTQ1ODQ1NTg0YWJlODhhMWZhYmY4ZjMyZjcxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9jaGRhbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkZGNlNzkxNzhlMDRmZjQ5YTFmMDYzZjQ4NDY1MzRmLnNldENvbnRlbnQoaHRtbF84OWEwYTQ1ODQ1NTg0YWJlODhhMWZhYmY4ZjMyZjcxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzExZTliZDkwMDQ0MDExOGVkYTQyMDlhZjhiNGI2NC5iaW5kUG9wdXAocG9wdXBfM2RkY2U3OTE3OGUwNGZmNDlhMWYwNjNmNDg0NjUzNGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVlZmIwZDM1OTRiNGE0YmJiZTRmOGNmZTNjOTg1OWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjYyMzA0OTAzNjg1ODQsLTczLjc2MDQyMDkyNjgyMjg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4OTMzNjk5NTMyNzRlNTdhMzAzZjJmZjMzYjhlMTY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0MWI1M2Q3Nzg0NTRkYTg4MWRlZTYzZGZmY2RkZmY4ID0gJCgnPGRpdiBpZD0iaHRtbF9mNDFiNTNkNzc4NDU0ZGE4ODFkZWU2M2RmZmNkZGZmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3ByaW5nZmllbGQgR2FyZGVuczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg5MzM2OTk1MzI3NGU1N2EzMDNmMmZmMzNiOGUxNjguc2V0Q29udGVudChodG1sX2Y0MWI1M2Q3Nzg0NTRkYTg4MWRlZTYzZGZmY2RkZmY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1ZWZiMGQzNTk0YjRhNGJiYmU0ZjhjZmUzYzk4NTlhLmJpbmRQb3B1cChwb3B1cF8yODkzMzY5OTUzMjc0ZTU3YTMwM2YyZmYzM2I4ZTE2OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOTJmMTFhMWU0N2I0YjFkOTdiMDU4ZWYzY2VhMGQwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5Mjc3NDYzOTE2MDg0NSwtNzMuNzM1MjY4NzM3MDgwMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTRkNjY5Y2VjMmJiNDI1M2I0NDA0NjMwNjE3ZjQxNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU4NjZmZWM3NWY3NGEwNWI4YjA4MWZmMTRmNGMzOGEgPSAkKCc8ZGl2IGlkPSJodG1sX2RlODY2ZmVjNzVmNzRhMDViOGIwODFmZjE0ZjRjMzhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYW1icmlhIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0ZDY2OWNlYzJiYjQyNTNiNDQwNDYzMDYxN2Y0MTRkLnNldENvbnRlbnQoaHRtbF9kZTg2NmZlYzc1Zjc0YTA1YjhiMDgxZmYxNGY0YzM4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOTJmMTFhMWU0N2I0YjFkOTdiMDU4ZWYzY2VhMGQwNy5iaW5kUG9wdXAocG9wdXBfOTRkNjY5Y2VjMmJiNDI1M2I0NDA0NjMwNjE3ZjQxNGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWEwOWE3Mjk1YTY3NDUzM2I3Yzk4OGNkNWM4MGM2MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NTk4MTY0MzM0MjgwODQsLTczLjczNTI2MDc5NDI4Mjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JjMzAxMzg1NWZmYTRiMDA5ODRlZGI4YWQ5YmQwYTkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwY2IwZGJjY2Y1NTRmNzA4YTVkMjk5MzlhZjc2MTNhID0gJCgnPGRpdiBpZD0iaHRtbF9iMGNiMGRiY2NmNTU0ZjcwOGE1ZDI5OTM5YWY3NjEzYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9zZWRhbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JjMzAxMzg1NWZmYTRiMDA5ODRlZGI4YWQ5YmQwYTkxLnNldENvbnRlbnQoaHRtbF9iMGNiMGRiY2NmNTU0ZjcwOGE1ZDI5OTM5YWY3NjEzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YTA5YTcyOTVhNjc0NTMzYjdjOTg4Y2Q1YzgwYzYwYS5iaW5kUG9wdXAocG9wdXBfYmMzMDEzODU1ZmZhNGIwMDk4NGVkYjhhZDliZDBhOTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVmODc5Y2U0Zjc4NDQ3ZDk3N2M1MmYxZGMyOTEzYTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MDMxMzQ0MzI1MDA4OTQsLTczLjc1NDk3OTY4MDQzODcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwMzBhY2IwY2JjNzQxYjNiOTlhNWIwMGVhOWRiYjIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjNGQ4YzA1ZGE1OTQ4ODZhNTdiNWU4OTI2OGY0YjdhID0gJCgnPGRpdiBpZD0iaHRtbF83YzRkOGMwNWRhNTk0ODg2YTU3YjVlODkyNjhmNGI3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RmFyIFJvY2thd2F5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDMwYWNiMGNiYzc0MWIzYjk5YTViMDBlYTlkYmIyMC5zZXRDb250ZW50KGh0bWxfN2M0ZDhjMDVkYTU5NDg4NmE1N2I1ZTg5MjY4ZjRiN2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTVmODc5Y2U0Zjc4NDQ3ZDk3N2M1MmYxZGMyOTEzYTQuYmluZFBvcHVwKHBvcHVwXzYwMzBhY2IwY2JjNzQxYjNiOTlhNWIwMGVhOWRiYjIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5NmVkYmNiNGRjMDRhNTA4NjAyOWM0YzBmMTRhZDY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjAzMDI2NTgzNTEyMzgsLTczLjgyMDA1NDg5MTEwMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2U3NjMyN2NmOWU1NDUyOGExMzYwZjg1ZmY4N2UzNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNlYThkY2IzMDNmNGEwYjlhZDAwZGE0ZTUzZTY1ZDAgPSAkKCc8ZGl2IGlkPSJodG1sXzMzZWE4ZGNiMzAzZjRhMGI5YWQwMGRhNGU1M2U2NWQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZCBDaGFubmVsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZTc2MzI3Y2Y5ZTU0NTI4YTEzNjBmODVmZjg3ZTM1ZS5zZXRDb250ZW50KGh0bWxfMzNlYThkY2IzMDNmNGEwYjlhZDAwZGE0ZTUzZTY1ZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjk2ZWRiY2I0ZGMwNGE1MDg2MDI5YzRjMGYxNGFkNjkuYmluZFBvcHVwKHBvcHVwXzNlNzYzMjdjZjllNTQ1MjhhMTM2MGY4NWZmODdlMzVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmNzU0YTFkYjc4YzQyNjBiMTJjZGY1MDVmY2FkZWU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTU3NDAxMjg4NDU0NTIsLTczLjkyNTUxMTk2OTk0MTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3MGYwZjI4ZjY5NjQ4OTk4OTA2NjQ2ODI0ZmNhOGNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiYjc4ZjMxNGUyNDRhMTNiMDMxYmZkOWZjMjFlODc0ID0gJCgnPGRpdiBpZD0iaHRtbF83YmI3OGYzMTRlMjQ0YTEzYjAzMWJmZDlmYzIxZTg3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJlZXp5IFBvaW50PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NzBmMGYyOGY2OTY0ODk5ODkwNjY0NjgyNGZjYThjYy5zZXRDb250ZW50KGh0bWxfN2JiNzhmMzE0ZTI0NGExM2IwMzFiZmQ5ZmMyMWU4NzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGY3NTRhMWRiNzhjNDI2MGIxMmNkZjUwNWZjYWRlZTYuYmluZFBvcHVwKHBvcHVwXzY3MGYwZjI4ZjY5NjQ4OTk4OTA2NjQ2ODI0ZmNhOGNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyMGVkMzk0Nzg1NzQxODI4ZWYwYjNkMjg2NWMxMzE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc1OTIzMDE1NjQyODk2LC03My45MDIyODk2MDM5MTY3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjE1ZmQyOTBiNTQ0MWExOWU4ZWI1NDcyZDNmZGQ4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTk5MmQ5MTRmOGY0NjQwODM4ZjVhYzJjMDlkNTZkMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNDk5OTJkOTE0ZjhmNDY0MDgzOGY1YWMyYzA5ZDU2ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0ZWlud2F5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjE1ZmQyOTBiNTQ0MWExOWU4ZWI1NDcyZDNmZGQ4My5zZXRDb250ZW50KGh0bWxfNDk5OTJkOTE0ZjhmNDY0MDgzOGY1YWMyYzA5ZDU2ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTIwZWQzOTQ3ODU3NDE4MjhlZjBiM2QyODY1YzEzMTQuYmluZFBvcHVwKHBvcHVwX2MyMTVmZDI5MGI1NDQxYTE5ZThlYjU0NzJkM2ZkZDgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxNzZkYzJiNGJiZTQxZGJiNjkwZDhjMWZjMjNjODUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkyNzgxNDAzNjAwNDgsLTczLjgwNDM2NDUxNzIwOTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhODcxYWRkNjg2ZDQ1NGZiZmE5YWQwYzkzYTBhMDI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3OTkyMGQ4NzlmYjQxYmU4MzRhYzFmNWNkMTRjM2RiID0gJCgnPGRpdiBpZD0iaHRtbF9lNzk5MjBkODc5ZmI0MWJlODM0YWMxZjVjZDE0YzNkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVlY2hodXJzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWE4NzFhZGQ2ODZkNDU0ZmJmYTlhZDBjOTNhMGEwMjkuc2V0Q29udGVudChodG1sX2U3OTkyMGQ4NzlmYjQxYmU4MzRhYzFmNWNkMTRjM2RiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxNzZkYzJiNGJiZTQxZGJiNjkwZDhjMWZjMjNjODUwLmJpbmRQb3B1cChwb3B1cF81YTg3MWFkZDY4NmQ0NTRmYmZhOWFkMGM5M2EwYTAyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTE4MDkwZWU4ZWE0MzMzOTdjZjYzMzE4ZmY2NTQ0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4Mjg0MjgwNjI0NTU1NCwtNzMuNzc2ODAyMjI2MjE1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYmZjNjc1MDZlYTc0ZTI4YjExNzMwMzY1YjA1NzdlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzk1MzNkZmM5Yzk0NWQ2ODE3MmQ4NjNjMDRmNjdlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzM5NTMzZGZjOWM5NDVkNjgxNzJkODYzYzA0ZjY3ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheSBUZXJyYWNlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYmZjNjc1MDZlYTc0ZTI4YjExNzMwMzY1YjA1NzdlMi5zZXRDb250ZW50KGh0bWxfMzM5NTMzZGZjOWM5NDVkNjgxNzJkODYzYzA0ZjY3ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDExODA5MGVlOGVhNDMzMzk3Y2Y2MzMxOGZmNjU0NDcuYmluZFBvcHVwKHBvcHVwX2FiZmM2NzUwNmVhNzRlMjhiMTE3MzAzNjViMDU3N2UyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiZmIxYWU0MDBhMTRkY2E4MDQ2Nzk4ODc5ZDRiYzg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTk1NjQxODA3MzY4NDk0LC03My43NzYxMzI4MjM5MTcwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDkxNmZkOGIwY2U0YWUyYjQ1NmIzNDE1ODRhMGE0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTFhZWQ4YzcyMjU0ZjQwOWYyMjA1Nzk4NzVkMDI0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDUxYWVkOGM3MjI1NGY0MDlmMjIwNTc5ODc1ZDAyNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVkZ2VtZXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDkxNmZkOGIwY2U0YWUyYjQ1NmIzNDE1ODRhMGE0OS5zZXRDb250ZW50KGh0bWxfZDUxYWVkOGM3MjI1NGY0MDlmMjIwNTc5ODc1ZDAyNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGJmYjFhZTQwMGExNGRjYTgwNDY3OTg4NzlkNGJjODguYmluZFBvcHVwKHBvcHVwXzRkOTE2ZmQ4YjBjZTRhZTJiNDU2YjM0MTU4NGEwYTQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1NzNiMDc1ZTBlYzQzYjFiNjAwMDg2MmU2ZmFhNjI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTg5MTQzOTQzNzI5NzEsLTczLjc5MTk5MjMzMTM2OTQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhNDk4YjY3ZTFiNjQ5Mzg4NzBmYWE1OGYxZTcwNzc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MTY4OWFlZDYwYTQ0ZTI5MTM5ZTE3YmIxNDY1NDJhID0gJCgnPGRpdiBpZD0iaHRtbF82NzE2ODlhZWQ2MGE0NGUyOTEzOWUxN2JiMTQ2NTQyYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJ2ZXJuZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGE0OThiNjdlMWI2NDkzODg3MGZhYTU4ZjFlNzA3Nzcuc2V0Q29udGVudChodG1sXzY3MTY4OWFlZDYwYTQ0ZTI5MTM5ZTE3YmIxNDY1NDJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1NzNiMDc1ZTBlYzQzYjFiNjAwMDg2MmU2ZmFhNjI3LmJpbmRQb3B1cChwb3B1cF8wYTQ5OGI2N2UxYjY0OTM4ODcwZmFhNThmMWU3MDc3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZjVhMDMzM2RiZWY0NzQzYmQ3MDljMGUyYzNhYmRiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4MjgwMTY5Njg0NTU4NiwtNzMuODIyMzYxMjEwODg3NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjRkMzc5ZTRhMjAxNGJlYjlkMzg2ODMwYTVjNGZkZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQyNDJhZDQ1MjA5NDFmNzgzMmJkNTdkOTU5NmUzNTIgPSAkKCc8ZGl2IGlkPSJodG1sXzRkMjQyYWQ0NTIwOTQxZjc4MzJiZDU3ZDk1OTZlMzUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb2NrYXdheSBCZWFjaDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjRkMzc5ZTRhMjAxNGJlYjlkMzg2ODMwYTVjNGZkZDAuc2V0Q29udGVudChodG1sXzRkMjQyYWQ0NTIwOTQxZjc4MzJiZDU3ZDk1OTZlMzUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlmNWEwMzMzZGJlZjQ3NDNiZDcwOWMwZTJjM2FiZGI0LmJpbmRQb3B1cChwb3B1cF8yNGQzNzllNGEyMDE0YmViOWQzODY4MzBhNWM0ZmRkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjFhNDU1NWM1NGM0ZGI0OWNjMGZlNDUzMWY3YWRjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3MjAzNjczMDIxNzAxNSwtNzMuODU3NTQ2NzI0MTA4MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY4MDJhYmNlY2NiNDY2ZDk1MzM0ODJhNzI3OGI2NjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI0Yzg4YTg5NTNkNGRlMmIyNWNkYTUxYjExNDFlNzYgPSAkKCc8ZGl2IGlkPSJodG1sXzEyNGM4OGE4OTUzZDRkZTJiMjVjZGE1MWIxMTQxZTc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXBvbnNpdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODY4MDJhYmNlY2NiNDY2ZDk1MzM0ODJhNzI3OGI2NjAuc2V0Q29udGVudChodG1sXzEyNGM4OGE4OTUzZDRkZTJiMjVjZGE1MWIxMTQxZTc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiMWE0NTU1YzU0YzRkYjQ5Y2MwZmU0NTMxZjdhZGMzLmJpbmRQb3B1cChwb3B1cF84NjgwMmFiY2VjY2I0NjZkOTUzMzQ4MmE3Mjc4YjY2MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOWMyZTk2N2UyYTU0ZmM4OThlMDY1NTEyMWRiODE0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDEyNjEyMjYxNDA2NiwtNzMuODEyNzYyNjkxMzU4NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzFlODMyMmM0NTI3NGRiZTljZWUwNjg5MWQzNzU0MDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTVhOTIzMTNjYmZkNDEzYzk4NWM5MTU3MzBjNTg2YzUgPSAkKCc8ZGl2IGlkPSJodG1sX2E1YTkyMzEzY2JmZDQxM2M5ODVjOTE1NzMwYzU4NmM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdXJyYXkgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzFlODMyMmM0NTI3NGRiZTljZWUwNjg5MWQzNzU0MDYuc2V0Q29udGVudChodG1sX2E1YTkyMzEzY2JmZDQxM2M5ODVjOTE1NzMwYzU4NmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI5YzJlOTY3ZTJhNTRmYzg5OGUwNjU1MTIxZGI4MTQ2LmJpbmRQb3B1cChwb3B1cF83MWU4MzIyYzQ1Mjc0ZGJlOWNlZTA2ODkxZDM3NTQwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMzZmYzhjNjJiMDU0NmFmYTZjMDBjYjZkNGI4MjI0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MTM3ODQyMTk0NTQzNCwtNzMuNzA4ODQ3MDU4ODkyNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmU2MDZkMDMwYWRjNGM5MTlhOGM4YWVkYTdjNzkyN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQwMDA2ZGViN2M5NDk3YzkxM2UwZmE5YTUwZWUxYWIgPSAkKCc8ZGl2IGlkPSJodG1sXzRkMDAwNmRlYjdjOTQ5N2M5MTNlMGZhOWE1MGVlMWFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GbG9yYWwgUGFyazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmU2MDZkMDMwYWRjNGM5MTlhOGM4YWVkYTdjNzkyN2Iuc2V0Q29udGVudChodG1sXzRkMDAwNmRlYjdjOTQ5N2M5MTNlMGZhOWE1MGVlMWFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzNmZjOGM2MmIwNTQ2YWZhNmMwMGNiNmQ0YjgyMjRmLmJpbmRQb3B1cChwb3B1cF82ZTYwNmQwMzBhZGM0YzkxOWE4YzhhZWRhN2M3OTI3Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWI5ZGNjMTkyOGY0OTA0OTliZWQ2NjA3YTMxODdkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMDk1NzIwNzY0NDQsLTczLjc2NzE0MTY2NzE0NzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwYjRjYjVlMWJiNTQxZDViNjc0Yjc5YzA2MzVmMjkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjOTAwYzkzOTVmYTQzZjJiYTIwNzZhNDQzYzZlYzZkID0gJCgnPGRpdiBpZD0iaHRtbF83YzkwMGM5Mzk1ZmE0M2YyYmEyMDc2YTQ0M2M2ZWM2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGlzd29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjBiNGNiNWUxYmI1NDFkNWI2NzRiNzljMDYzNWYyOTAuc2V0Q29udGVudChodG1sXzdjOTAwYzkzOTVmYTQzZjJiYTIwNzZhNDQzYzZlYzZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU1YjlkY2MxOTI4ZjQ5MDQ5OWJlZDY2MDdhMzE4N2RiLmJpbmRQb3B1cChwb3B1cF9iMGI0Y2I1ZTFiYjU0MWQ1YjY3NGI3OWMwNjM1ZjI5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDAzNjIzZjI5N2Q0NDIzODQ4NTI2YjczNDA0ODBiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNjgwNDgzMDE0NjEzLC03My43ODcyMjY5NjkzNjY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MTU5NTg1NWJkMzQyYTc4ZWY0MWJlOGRiYTRlYWI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3NGIzNGY1YTU4MTRhM2I4ZDdhMGQyZDgwZGY1OTUyID0gJCgnPGRpdiBpZD0iaHRtbF9lNzRiMzRmNWE1ODE0YTNiOGQ3YTBkMmQ4MGRmNTk1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmFtYWljYSBFc3RhdGVzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDE1OTU4NTViZDM0MmE3OGVmNDFiZThkYmE0ZWFiOS5zZXRDb250ZW50KGh0bWxfZTc0YjM0ZjVhNTgxNGEzYjhkN2EwZDJkODBkZjU5NTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDAwMzYyM2YyOTdkNDQyMzg0ODUyNmI3MzQwNDgwYjkuYmluZFBvcHVwKHBvcHVwXzM0MTU5NTg1NWJkMzQyYTc4ZWY0MWJlOGRiYTRlYWI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4ZDcwOTE2NjQ5NTRjOTY4ZDRmODlmZGQ2NTZiYzdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0NTcyMzA5Mjg2NywtNzMuODI1ODA5MTUxMTA1NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmU2OWE2MmQwMDYyNGEwY2E2ZTAyM2MzM2Q5OTUxOTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmIzZDU5MGViNTkyNDgyMjhhNmM2MmI1YTQxNTg0MTEgPSAkKCc8ZGl2IGlkPSJodG1sX2ZiM2Q1OTBlYjU5MjQ4MjI4YTZjNjJiNWE0MTU4NDExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5RdWVlbnNib3JvIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlNjlhNjJkMDA2MjRhMGNhNmUwMjNjMzNkOTk1MTk0LnNldENvbnRlbnQoaHRtbF9mYjNkNTkwZWI1OTI0ODIyOGE2YzYyYjVhNDE1ODQxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOGQ3MDkxNjY0OTU0Yzk2OGQ0Zjg5ZmRkNjU2YmM3YS5iaW5kUG9wdXAocG9wdXBfNmU2OWE2MmQwMDYyNGEwY2E2ZTAyM2MzM2Q5OTUxOTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmI0ZDY4ZTRmNzgwNDgzNWJmZDNmYzZmOGE1MTMwOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjM4MjQ5MDE4MjkyMDQsLTczLjc5NzYwMzAwOTEyNjcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1NWE0MjkyNDAxMTQxYzBhNjMzNTkyYzk0NmE3NmEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyM2EzOGM5YzJmZDQ2OTRiYjZiNmRiNDkzOTAwZWFiID0gJCgnPGRpdiBpZD0iaHRtbF8yMjNhMzhjOWMyZmQ0Njk0YmI2YjZkYjQ5MzkwMGVhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGlsbGNyZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTVhNDI5MjQwMTE0MWMwYTYzMzU5MmM5NDZhNzZhMC5zZXRDb250ZW50KGh0bWxfMjIzYTM4YzljMmZkNDY5NGJiNmI2ZGI0OTM5MDBlYWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmI0ZDY4ZTRmNzgwNDgzNWJmZDNmYzZmOGE1MTMwOWEuYmluZFBvcHVwKHBvcHVwX2E1NWE0MjkyNDAxMTQxYzBhNjMzNTkyYzk0NmE3NmEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViZjk2ZjA2Nzk0MjQ4OWI5ZjgwZThjOTEyYzA4MTZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYxNzA0NTI2MDU0MTQ2LC03My45MzE1NzUwNjA3Mjg3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Njc5MTY3YTBiODE0YTQ5OTE4YzJlYTIzMGNhMGVkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZWM1N2QxZTU0OGI0MDBjYWUzYjU4YTBhNDYxZTFlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfOGVjNTdkMWU1NDhiNDAwY2FlM2I1OGEwYTQ2MWUxZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhdmVuc3dvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc2NzkxNjdhMGI4MTRhNDk5MThjMmVhMjMwY2EwZWQ4LnNldENvbnRlbnQoaHRtbF84ZWM1N2QxZTU0OGI0MDBjYWUzYjU4YTBhNDYxZTFlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YmY5NmYwNjc5NDI0ODliOWY4MGU4YzkxMmMwODE2Yi5iaW5kUG9wdXAocG9wdXBfNzY3OTE2N2EwYjgxNGE0OTkxOGMyZWEyMzBjYTBlZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjIzMTNmZDJhNDdjNGFhZThlM2JiNWY0ZDdjMTNlNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjM5MTg0MTkyNTEzOSwtNzMuODQ5NjM3ODI0MDI0NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDg0NjRmMjIzZTRmNGMwZjgxMTViMzc4MTc2OTNjNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzdjOTA0NjA4MDViNDNlYWI3ZDNlOTA4YmFhNWNkY2UgPSAkKCc8ZGl2IGlkPSJodG1sXzM3YzkwNDYwODA1YjQzZWFiN2QzZTkwOGJhYTVjZGNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MaW5kZW53b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODQ2NGYyMjNlNGY0YzBmODExNWIzNzgxNzY5M2M2MS5zZXRDb250ZW50KGh0bWxfMzdjOTA0NjA4MDViNDNlYWI3ZDNlOTA4YmFhNWNkY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjIzMTNmZDJhNDdjNGFhZThlM2JiNWY0ZDdjMTNlNGIuYmluZFBvcHVwKHBvcHVwX2Q4NDY0ZjIyM2U0ZjRjMGY4MTE1YjM3ODE3NjkzYzYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3ZmY4ZjMzM2JlMTRiNjU5YTA3ZjRlZDU1MzM2YjVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY3ODgzODk2NjAyNDcsLTczLjc0MDI1NjA3OTg5ODIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4MmRmMDBkZGI2YzQ4OTA5OWNjZmVjOWNkZTVhNDQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljMjkwMjdhYjNkYjRiMTRhOGY1YTkyMzMyYzA0MDg3ID0gJCgnPGRpdiBpZD0iaHRtbF85YzI5MDI3YWIzZGI0YjE0YThmNWE5MjMzMmMwNDA4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGF1cmVsdG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODJkZjAwZGRiNmM0ODkwOTljY2ZlYzljZGU1YTQ0MC5zZXRDb250ZW50KGh0bWxfOWMyOTAyN2FiM2RiNGIxNGE4ZjVhOTIzMzJjMDQwODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjdmZjhmMzMzYmUxNGI2NTlhMDdmNGVkNTUzMzZiNWQuYmluZFBvcHVwKHBvcHVwX2U4MmRmMDBkZGI2YzQ4OTA5OWNjZmVjOWNkZTVhNDQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyYjFhZWI5MDVjMTRmMjc4MDliYTEzMzQ4MWE0MDNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM2MDc0NTcwODMwNzk1LC03My44NjI1MjQ3MTQxMzc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5YjcyNTBmZTgyYzQ1ZGViY2U4MGVkMzNmYTE2ZWRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiZTkzZjM1MGI4MDRiMDI5MWU3M2I1ZjQzZTMzZjNlID0gJCgnPGRpdiBpZD0iaHRtbF8xYmU5M2YzNTBiODA0YjAyOTFlNzNiNWY0M2UzM2YzZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVmcmFrIENpdHk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5YjcyNTBmZTgyYzQ1ZGViY2U4MGVkMzNmYTE2ZWRiLnNldENvbnRlbnQoaHRtbF8xYmU5M2YzNTBiODA0YjAyOTFlNzNiNWY0M2UzM2YzZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMmIxYWViOTA1YzE0ZjI3ODA5YmExMzM0ODFhNDAzZC5iaW5kUG9wdXAocG9wdXBfNjliNzI1MGZlODJjNDVkZWJjZTgwZWQzM2ZhMTZlZGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWUyZGFjMTY0MTVlNDllYTgzNDg5YTQ1MzM2YTNmMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NzYxNTU1NjU0MzEwOSwtNzMuODU0MDE3NTAzOTI1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDE2NjcyYzk2NmI0NTE3OWE5OTk3ODczZmIxMGZjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWU2ZjBhZmZmMjg0YWM0YTA3NmNhZmE1Mzg2NjM0NiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjVlNmYwYWZmZjI4NGFjNGEwNzZjYWZhNTM4NjYzNDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlbGxlIEhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmQxNjY3MmM5NjZiNDUxNzlhOTk5Nzg3M2ZiMTBmY2Yuc2V0Q29udGVudChodG1sX2I1ZTZmMGFmZmYyODRhYzRhMDc2Y2FmYTUzODY2MzQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVlMmRhYzE2NDE1ZTQ5ZWE4MzQ4OWE0NTMzNmEzZjBkLmJpbmRQb3B1cChwb3B1cF8yZDE2NjcyYzk2NmI0NTE3OWE5OTk3ODczZmIxMGZjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNTQ1YTU4NTMyNzk0MGUyOTNlNzRkMWIyMTc3MDYyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4MDM0Mjk1NjQ2MTMxLC03My44NDE1MzM3MDIyNjE4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMGVhOTM2ZGE2NjY0ZjUwYjkwYThmMGQ0ZWFhY2UwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjU1NjAwYTMzNWU0NjcxYmI4ZWYzOGE1YzUwYjA5MyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjI1NTYwMGEzMzVlNDY3MWJiOGVmMzhhNWM1MGIwOTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvY2thd2F5IFBhcms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwZWE5MzZkYTY2NjRmNTBiOTBhOGYwZDRlYWFjZTAyLnNldENvbnRlbnQoaHRtbF9iMjU1NjAwYTMzNWU0NjcxYmI4ZWYzOGE1YzUwYjA5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNTQ1YTU4NTMyNzk0MGUyOTNlNzRkMWIyMTc3MDYyYi5iaW5kUG9wdXAocG9wdXBfZDBlYTkzNmRhNjY2NGY1MGI5MGE4ZjBkNGVhYWNlMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzllMmIzMTk3ODUzNDkwMWIzMzdlMjIxM2UyZWI5NjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTc3MTA2MTU2NTc2OCwtNzMuNzk2NjQ3NTA4NDQwNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQ2ODI1NjQ3ZmQwNDQ0M2I5NjI2NDUxMDkyN2Q0ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzRmNmFkYjViMjMwNDE1ZTkxYzhlMGU0ZGExYjdlZTYgPSAkKCc8ZGl2IGlkPSJodG1sX2M0ZjZhZGI1YjIzMDQxNWU5MWM4ZTBlNGRhMWI3ZWU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb21lcnZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDY4MjU2NDdmZDA0NDQzYjk2MjY0NTEwOTI3ZDRkNy5zZXRDb250ZW50KGh0bWxfYzRmNmFkYjViMjMwNDE1ZTkxYzhlMGU0ZGExYjdlZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzllMmIzMTk3ODUzNDkwMWIzMzdlMjIxM2UyZWI5NjkuYmluZFBvcHVwKHBvcHVwXzRkNjgyNTY0N2ZkMDQ0NDNiOTYyNjQ1MTA5MjdkNGQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlZmZkN2YzZDFmOTQzYWViYTU3MTcyMzhkYjk3ZWZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjYwMDAzMjI3MzM2MTMsLTczLjc1MTc1MzEwNzMxMTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxMzg4OWNhNjU3YTQ4NTdhODVjMTE1YWUzNTAyNmViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmNTU2YTllYjg0YjRmMGQ5YmVlNGIzZDAyYjg4MzI5ID0gJCgnPGRpdiBpZD0iaHRtbF9hZjU1NmE5ZWI4NGI0ZjBkOWJlZTRiM2QwMmI4ODMyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvb2t2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTEzODg5Y2E2NTdhNDg1N2E4NWMxMTVhZTM1MDI2ZWIuc2V0Q29udGVudChodG1sX2FmNTU2YTllYjg0YjRmMGQ5YmVlNGIzZDAyYjg4MzI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlZmZkN2YzZDFmOTQzYWViYTU3MTcyMzhkYjk3ZWZiLmJpbmRQb3B1cChwb3B1cF9lMTM4ODljYTY1N2E0ODU3YTg1YzExNWFlMzUwMjZlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTMwMmVkODBiZGY0ZmJlOWExYWU4ZTcxNjM4NWYzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMzAxNDA0MDI3ODM0LC03My43Mzg4OTE5ODkxMjQ4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDg3YmE3ZjQ5NTU0ZWIxOWNkOWQ3YWYzYmRkYTM1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZjQyZjk0MWEwY2M0NGIwYmYzZTFhODNhMWU1NDc4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWY0MmY5NDFhMGNjNDRiMGJmM2UxYTgzYTFlNTQ3ODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlbGxhaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDg3YmE3ZjQ5NTU0ZWIxOWNkOWQ3YWYzYmRkYTM1OS5zZXRDb250ZW50KGh0bWxfZWY0MmY5NDFhMGNjNDRiMGJmM2UxYTgzYTFlNTQ3ODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGUzMDJlZDgwYmRmNGZiZTlhMWFlOGU3MTYzODVmM2EuYmluZFBvcHVwKHBvcHVwX2ZkODdiYTdmNDk1NTRlYjE5Y2Q5ZDdhZjNiZGRhMzU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyMzA2NmZlYTA0ZTQ5NWM4YjUzN2NhZDAxYjg4NDg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0MDcwOTk5MDQ4OSwtNzMuODU3NTE3OTA2NzY0NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGRmMWE0YzJhYzM0NDUyMjk5Y2FkNWY4YjIwNDc5NjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzkyZDgyMjJmMWQwNGRjYmI1OTY0ZDNhZjhmZDFjZmEgPSAkKCc8ZGl2IGlkPSJodG1sX2M5MmQ4MjIyZjFkMDRkY2JiNTk2NGQzYWY4ZmQxY2ZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aCBDb3JvbmE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkZjFhNGMyYWMzNDQ1MjI5OWNhZDVmOGIyMDQ3OTY2LnNldENvbnRlbnQoaHRtbF9jOTJkODIyMmYxZDA0ZGNiYjU5NjRkM2FmOGZkMWNmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MjMwNjZmZWEwNGU0OTVjOGI1MzdjYWQwMWI4ODQ4OS5iaW5kUG9wdXAocG9wdXBfNGRmMWE0YzJhYzM0NDUyMjk5Y2FkNWY4YjIwNDc5NjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2Y1NTMwMzY1ODI2NGY4MmFiYTNkM2RmZTk1MWVhMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQ2MTEwODE1MTE3LC03My44NDEwMjIxMTIzNDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0Yjk4ZjE5NWFhMTQ4NTg5MTUxMTU3N2ZkNGY5MmRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3MzE5OTQ3Mjc2ZDQwM2FhY2M0NWE0ZWUzMTIzNTA2ID0gJCgnPGRpdiBpZD0iaHRtbF8wNzMxOTk0NzI3NmQ0MDNhYWNjNDVhNGVlMzEyMzUwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9yZXN0IEhpbGxzIEdhcmRlbnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0Yjk4ZjE5NWFhMTQ4NTg5MTUxMTU3N2ZkNGY5MmRhLnNldENvbnRlbnQoaHRtbF8wNzMxOTk0NzI3NmQ0MDNhYWNjNDVhNGVlMzEyMzUwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZjU1MzAzNjU4MjY0ZjgyYWJhM2QzZGZlOTUxZWEwOS5iaW5kUG9wdXAocG9wdXBfZDRiOThmMTk1YWExNDg1ODkxNTExNTc3ZmQ0ZjkyZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ0Nzk4ZTg2NzRlNGE4NGEyZGIyMjdlZjBjM2UzNDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTE0NTk2NDM3MDQ4MiwtNzMuNzk2NDY0NjIwODE1OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTY5NDYxMWI0MGRjNDM2OTk1MTI4ZGE3OGM0OTU0ODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWEwNzQ2NjNlNTk4NDk0NzgyM2YyYmRiZTY5OTBlN2QgPSAkKCc8ZGl2IGlkPSJodG1sXzVhMDc0NjYzZTU5ODQ5NDc4MjNmMmJkYmU2OTkwZTdkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYW1haWNhIEhpbGxzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjk0NjExYjQwZGM0MzY5OTUxMjhkYTc4YzQ5NTQ4My5zZXRDb250ZW50KGh0bWxfNWEwNzQ2NjNlNTk4NDk0NzgyM2YyYmRiZTY5OTBlN2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQ0Nzk4ZTg2NzRlNGE4NGEyZGIyMjdlZjBjM2UzNDYuYmluZFBvcHVwKHBvcHVwX2U2OTQ2MTFiNDBkYzQzNjk5NTEyOGRhNzhjNDk1NDgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiYzlmOTQ2MDNjZTRlNTFiMTc0NDcyNGJjNDRlY2ZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMzNTAwMjU0Mjk3NTcsLTczLjc5NjcxNjc4MDI4MzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmYzlkMGY0NjlhNTQ5NWM5MjhiMjFhNWEwNGE5ZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkZDE0ZDczYjZmZjRjYWRiNjIwZTk5MTdmMTI1YmNlID0gJCgnPGRpdiBpZD0iaHRtbF9iZGQxNGQ3M2I2ZmY0Y2FkYjYyMGU5OTE3ZjEyNWJjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VXRvcGlhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmM5ZDBmNDY5YTU0OTVjOTI4YjIxYTVhMDRhOWY4Yy5zZXRDb250ZW50KGh0bWxfYmRkMTRkNzNiNmZmNGNhZGI2MjBlOTkxN2YxMjViY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGJjOWY5NDYwM2NlNGU1MWIxNzQ0NzI0YmM0NGVjZmUuYmluZFBvcHVwKHBvcHVwXzJmYzlkMGY0NjlhNTQ5NWM5MjhiMjFhNWEwNGE5ZjhjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmMTI2YjM4MTQ2NzQwYTU4YjMxNDkxMTcyM2EwYWIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0OTM2MTgwNzU0NzgsLTczLjgwNDg2MTIwMDQwNTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5OTZmMjVlMTQwZDQ2OWE5MjE5ZTIxZTYwZWNmY2NlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZiMDM5OWM0ZjQzOTRkNzBiOTk4NmUwMTY1NzIxYzE0ID0gJCgnPGRpdiBpZD0iaHRtbF9mYjAzOTljNGY0Mzk0ZDcwYjk5ODZlMDE2NTcyMWMxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UG9tb25vazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTk5NmYyNWUxNDBkNDY5YTkyMTllMjFlNjBlY2ZjY2Uuc2V0Q29udGVudChodG1sX2ZiMDM5OWM0ZjQzOTRkNzBiOTk4NmUwMTY1NzIxYzE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmMTI2YjM4MTQ2NzQwYTU4YjMxNDkxMTcyM2EwYWIwLmJpbmRQb3B1cChwb3B1cF81OTk2ZjI1ZTE0MGQ0NjlhOTIxOWUyMWU2MGVjZmNjZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NzE4MDU0Y2E0YjA0Mjc1YTJhMjA5YmQyNzE4NzE5ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MDMxNzM5Mjk5ODIsLTczLjg5NDY3OTk2MjcwNTc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2ZDZjNTVhODI5MzRiODk4NWUxZTAzOWZmMTk4MDE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyNTExYTNlM2UzYjQ4M2M4OGM2ZDQ1YzVlMzNhZGQyID0gJCgnPGRpdiBpZD0iaHRtbF83MjUxMWEzZTNlM2I0ODNjODhjNmQ0NWM1ZTMzYWRkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXN0b3JpYSBIZWlnaHRzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNmQ2YzU1YTgyOTM0Yjg5ODVlMWUwMzlmZjE5ODAxNi5zZXRDb250ZW50KGh0bWxfNzI1MTFhM2UzZTNiNDgzYzg4YzZkNDVjNWUzM2FkZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTcxODA1NGNhNGIwNDI3NWEyYTIwOWJkMjcxODcxOWYuYmluZFBvcHVwKHBvcHVwX2Y2ZDZjNTVhODI5MzRiODk4NWUxZTAzOWZmMTk4MDE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxMzY1YzQ2ODQ4MjQ1ZTM5ZGZlY2IxZTc5Nzc4YzI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQzNDE0MDkwMDczNTM2LC03My45NTM4Njc4MjEzMDc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGYzMjA1NGE1MzI0YzIwOWRjZjMwMWE1NjBkMTc4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMmJjMmVkMmFmNmM0ZjMxYTcwZmI3MGEyZTIxYTE4ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDJiYzJlZDJhZjZjNGYzMWE3MGZiNzBhMmUyMWExOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1bnRlcnMgUG9pbnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4ZjMyMDU0YTUzMjRjMjA5ZGNmMzAxYTU2MGQxNzgxLnNldENvbnRlbnQoaHRtbF8wMmJjMmVkMmFmNmM0ZjMxYTcwZmI3MGEyZTIxYTE4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTM2NWM0Njg0ODI0NWUzOWRmZWNiMWU3OTc3OGMyOC5iaW5kUG9wdXAocG9wdXBfMThmMzIwNTRhNTMyNGMyMDlkY2YzMDFhNTYwZDE3ODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzQxZmYzOTRiYjE4NGUxZWE3ZDczNzEyMmY4YWY2ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDU2NTE4MDYwODA3NiwtNzMuOTE4MTkyODY0MzE2ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI1NmYzZWMyZDYzNDMyY2JmYTMxNzAxZGRiNzk5NWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODBlYTMyOTAxZWI2NGZhNjkzZTljYjdkYmFjN2ZlMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzgwZWEzMjkwMWViNjRmYTY5M2U5Y2I3ZGJhYzdmZTAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdW5ueXNpZGUgR2FyZGVuczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI1NmYzZWMyZDYzNDMyY2JmYTMxNzAxZGRiNzk5NWMuc2V0Q29udGVudChodG1sXzgwZWEzMjkwMWViNjRmYTY5M2U5Y2I3ZGJhYzdmZTAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0MWZmMzk0YmIxODRlMWVhN2Q3MzcxMjJmOGFmNmUyLmJpbmRQb3B1cChwb3B1cF81MjU2ZjNlYzJkNjM0MzJjYmZhMzE3MDFkZGI3OTk1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iM2Q3MzBkZTY4Yzc0MjQ3OTMzMmZjNzI5NTkzMjBhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNzI1MDcxNjk0NDk3LC03My45MzI0NDIzNTI2MDE3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDNhMzNiOTExMDI0YmM4YjA1ODM3MzhiZjBhYjc5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTg1ZDVmNzc1NzY0YjcyOTJmNTdjZjZiMmNlMzA2MyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzU4NWQ1Zjc3NTc2NGI3MjkyZjU3Y2Y2YjJjZTMwNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJsaXNzdmlsbGU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkM2EzM2I5MTEwMjRiYzhiMDU4MzczOGJmMGFiNzk5LnNldENvbnRlbnQoaHRtbF9jNTg1ZDVmNzc1NzY0YjcyOTJmNTdjZjZiMmNlMzA2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iM2Q3MzBkZTY4Yzc0MjQ3OTMzMmZjNzI5NTkzMjBhMC5iaW5kUG9wdXAocG9wdXBfZWQzYTMzYjkxMTAyNGJjOGIwNTgzNzM4YmYwYWI3OTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2QxMDIzZjZhN2I1NGZhMDlmMGQzODU0MTdkMmRmODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NjczNzU4ODk1NzAzMiwtNzMuODkyMTM3NjAyMzI4MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU5YzJhYjM5ZWY4NGQ0MmJiYWIxZTVkMDQ1ZWY3N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTVjNGRhOWQ4OTNlNGFiNTkwZTAyN2VlM2ViMWQ3MzAgPSAkKCc8ZGl2IGlkPSJodG1sXzU1YzRkYTlkODkzZTRhYjU5MGUwMjdlZTNlYjFkNzMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Sb3hidXJ5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTljMmFiMzllZjg0ZDQyYmJhYjFlNWQwNDVlZjc3YS5zZXRDb250ZW50KGh0bWxfNTVjNGRhOWQ4OTNlNGFiNTkwZTAyN2VlM2ViMWQ3MzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2QxMDIzZjZhN2I1NGZhMDlmMGQzODU0MTdkMmRmODMuYmluZFBvcHVwKHBvcHVwX2VlOWMyYWIzOWVmODRkNDJiYmFiMWU1ZDA0NWVmNzdhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzYzNiOGZjNGQwZTQ5Y2U5ZjE3Nzc5ZjExNDZmZDJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2NDE0NTExMTU4MTg1LC03My44ODExNDMxOTIwMDYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWZjZGU1ZWExYzk0ODQxODM0YzE4OGI5YjUyMTk1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MGQyMDU3MzMzNzU0YzJhYWQzNmVmZjJlNzQzZmM3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTBkMjA1NzMzMzc1NGMyYWFkMzZlZmYyZTc0M2ZjN2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pZGRsZSBWaWxsYWdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMWZjZGU1ZWExYzk0ODQxODM0YzE4OGI5YjUyMTk1MS5zZXRDb250ZW50KGh0bWxfNTBkMjA1NzMzMzc1NGMyYWFkMzZlZmYyZTc0M2ZjN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTNjM2I4ZmM0ZDBlNDljZTlmMTc3NzlmMTE0NmZkMmUuYmluZFBvcHVwKHBvcHVwX2UxZmNkZTVlYTFjOTQ4NDE4MzRjMTg4YjliNTIxOTUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2NjZmZmVmNjY0ZTRhNzZiODkxZjZkMThiYTE4OTE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkwNjAxNTU2NzAxNDgsLTczLjgyNjY3NzU3MTM4NjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUxZWQ2YTg0YWE0ODRjNDE4MzVlY2Y0ZmQwOWU3ZTkwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkYzRhNmY1MDQ2ODQ2MjY4MTM4ZjRhNWQ2MTNhMmUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2MmU1OWQzMTAyMDQ0OGZiZjA3NWQ0MTg1OWUzZDFhID0gJCgnPGRpdiBpZD0iaHRtbF83NjJlNTlkMzEwMjA0NDhmYmYwNzVkNDE4NTllM2QxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFsYmE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkYzRhNmY1MDQ2ODQ2MjY4MTM4ZjRhNWQ2MTNhMmUyLnNldENvbnRlbnQoaHRtbF83NjJlNTlkMzEwMjA0NDhmYmYwNzVkNDE4NTllM2QxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NjY2ZmZlZjY2NGU0YTc2Yjg5MWY2ZDE4YmExODkxNi5iaW5kUG9wdXAocG9wdXBfMmRjNGE2ZjUwNDY4NDYyNjgxMzhmNGE1ZDYxM2EyZTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDdkNDg0MzU2ZDc3NDkwYjk2OTc2ZmY4MTg4YTk2MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODczMzc3NDAxODc0MSwtNzMuODA1NTMwMDI5Njg3MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTJhZTY0Njc4ZDljNDg2N2I4MGQxZDkwNmU0MDNjOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQ5MWUyZTllM2EwNGUxYzlkOTk3NmRjOTUyMjEyMGIgPSAkKCc8ZGl2IGlkPSJodG1sXzY0OTFlMmU5ZTNhMDRlMWM5ZDk5NzZkYzk1MjIxMjBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYW1tZWxzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMmFlNjQ2NzhkOWM0ODY3YjgwZDFkOTA2ZTQwM2M4Yi5zZXRDb250ZW50KGh0bWxfNjQ5MWUyZTllM2EwNGUxYzlkOTk3NmRjOTUyMjEyMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDdkNDg0MzU2ZDc3NDkwYjk2OTc2ZmY4MTg4YTk2MWYuYmluZFBvcHVwKHBvcHVwX2EyYWU2NDY3OGQ5YzQ4NjdiODBkMWQ5MDZlNDAzYzhiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4ZTcwMjA5NTE2NzQ1MjhiYjczMGFjYzYwZDQzNzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjExMzIxNjkxMjgzODM0LC03My43NjU5Njc4MTQ0NTYyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF81MWVkNmE4NGFhNDg0YzQxODM1ZWNmNGZkMDllN2U5MCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNTQ3NWM2MDE4ZmQ0YTY3YmY1NGMzZmFhODNlZjRlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWYzN2RjNTY5MTY0ZmFkYTc4ODJmZTI1NDAyODZmNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjVmMzdkYzU2OTE2NGZhZGE3ODgyZmUyNTQwMjg2ZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJheXN3YXRlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjU0NzVjNjAxOGZkNGE2N2JmNTRjM2ZhYTgzZWY0ZWMuc2V0Q29udGVudChodG1sXzY1ZjM3ZGM1NjkxNjRmYWRhNzg4MmZlMjU0MDI4NmY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4ZTcwMjA5NTE2NzQ1MjhiYjczMGFjYzYwZDQzNzdiLmJpbmRQb3B1cChwb3B1cF9mNTQ3NWM2MDE4ZmQ0YTY3YmY1NGMzZmFhODNlZjRlYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjJjZDkwNWQ1NDc0OTJmYjdkNWVhODFlZDI5Mzc0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjA5MTI5NzA5NDcwNiwtNzMuOTQ1NjMwNzAzMzQwOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNTFlZDZhODRhYTQ4NGM0MTgzNWVjZjRmZDA5ZTdlOTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjgwNTRmOGQ2ODRiNDEzOGIxMzAyYWE2MjY3YjNhZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTZmODNhZTkyNDBlNDk3MmExM2ZhOTY4ZTE5YzllNDkgPSAkKCc8ZGl2IGlkPSJodG1sXzU2ZjgzYWU5MjQwZTQ5NzJhMTNmYTk2OGUxOWM5ZTQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5RdWVlbnNicmlkZ2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4MDU0ZjhkNjg0YjQxMzhiMTMwMmFhNjI2N2IzYWU0LnNldENvbnRlbnQoaHRtbF81NmY4M2FlOTI0MGU0OTcyYTEzZmE5NjhlMTljOWU0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YjJjZDkwNWQ1NDc0OTJmYjdkNWVhODFlZDI5Mzc0My5iaW5kUG9wdXAocG9wdXBfNjgwNTRmOGQ2ODRiNDEzOGIxMzAyYWE2MjY3YjNhZTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f16b57f4a58>"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# create map of Manhattan using latitude and longitude values \n",
"print_map (queens_data, zoom=10) "
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Borough</th>\n",
" <th>Neighborhood</th>\n",
" <th>Latitude</th>\n",
" <th>Longitude</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Staten Island</td>\n",
" <td>St. George</td>\n",
" <td>40.644982</td>\n",
" <td>-74.079353</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Staten Island</td>\n",
" <td>New Brighton</td>\n",
" <td>40.640615</td>\n",
" <td>-74.087017</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Staten Island</td>\n",
" <td>Stapleton</td>\n",
" <td>40.626928</td>\n",
" <td>-74.077902</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Staten Island</td>\n",
" <td>Rosebank</td>\n",
" <td>40.615305</td>\n",
" <td>-74.069805</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Staten Island</td>\n",
" <td>West Brighton</td>\n",
" <td>40.631879</td>\n",
" <td>-74.107182</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Borough Neighborhood Latitude Longitude\n",
"0 Staten Island St. George 40.644982 -74.079353\n",
"1 Staten Island New Brighton 40.640615 -74.087017\n",
"2 Staten Island Stapleton 40.626928 -74.077902\n",
"3 Staten Island Rosebank 40.615305 -74.069805\n",
"4 Staten Island West Brighton 40.631879 -74.107182"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"StatenIsland_data = newyork_data[newyork_data['Borough'] == 'Staten Island'].reset_index(drop=True)\n",
"StatenIsland_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYiA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNDAuNzMwODYxOSwtNzMuOTg3MTU1OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNmNhOTFjZTRjYWFkNGZkMTk1NTEwMTg5MzFlNGEwMDggPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiMDdiY2E0MzgwYzQ4NTFhZjBkZWFjNDQ5YjkxZTM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQ0OTgxNTcxMDA0NCwtNzQuMDc5MzUzMTI1MTI3OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjY3ZDFlMGM0NTU2NGM3NmI4OTk2Y2RkZDUwNTc4MDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTJmY2ZlNGQ3ZTBiNGM2NWI0MzZmZDMxN2JkN2QyZjggPSAkKCc8ZGl2IGlkPSJodG1sXzEyZmNmZTRkN2UwYjRjNjViNDM2ZmQzMTdiZDdkMmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdC4gR2VvcmdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjdkMWUwYzQ1NTY0Yzc2Yjg5OTZjZGRkNTA1NzgwMC5zZXRDb250ZW50KGh0bWxfMTJmY2ZlNGQ3ZTBiNGM2NWI0MzZmZDMxN2JkN2QyZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGIwN2JjYTQzODBjNDg1MWFmMGRlYWM0NDliOTFlMzkuYmluZFBvcHVwKHBvcHVwX2Y2N2QxZTBjNDU1NjRjNzZiODk5NmNkZGQ1MDU3ODAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwY2Y3ZGI2NjQyNDQ3MjFiNDY1NTViNjg4ZjllMzBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjQwNjE0NTU5MTM1MTEsLTc0LjA4NzAxNjUwNTE2NjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxYjI5MGY2OGExODRhNDE5ZGI4MGFlNGRiZjhlZTcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzMWM1Y2JjMjc4YzQzZmNhMmJmMDAwNDc4ZmYwMDM0ID0gJCgnPGRpdiBpZD0iaHRtbF9lMzFjNWNiYzI3OGM0M2ZjYTJiZjAwMDQ3OGZmMDAzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IEJyaWdodG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMWIyOTBmNjhhMTg0YTQxOWRiODBhZTRkYmY4ZWU3MC5zZXRDb250ZW50KGh0bWxfZTMxYzVjYmMyNzhjNDNmY2EyYmYwMDA0NzhmZjAwMzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTBjZjdkYjY2NDI0NDcyMWI0NjU1NWI2ODhmOWUzMGYuYmluZFBvcHVwKHBvcHVwX2IxYjI5MGY2OGExODRhNDE5ZGI4MGFlNGRiZjhlZTcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1Y2U3Zjg4YmYxNDQ1ODNhZDNkMWQxYjQyMDg4YjNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjI2OTI3NjI1MzgxNzYsLTc0LjA3NzkwMTkyNjYwMDY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNjAwYWZjYmM1YTQ1MmJiYWE1NDU1OGZjYjYyZTU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4NjhiMDg3MmM3MzRjNTQ4NmU5YTdkYjIyODY5ZjI1ID0gJCgnPGRpdiBpZD0iaHRtbF9kODY4YjA4NzJjNzM0YzU0ODZlOWE3ZGIyMjg2OWYyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhcGxldG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYzYwMGFmY2JjNWE0NTJiYmFhNTQ1NThmY2I2MmU1NS5zZXRDb250ZW50KGh0bWxfZDg2OGIwODcyYzczNGM1NDg2ZTlhN2RiMjI4NjlmMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzVjZTdmODhiZjE0NDU4M2FkM2QxZDFiNDIwODhiM2MuYmluZFBvcHVwKHBvcHVwX2VjNjAwYWZjYmM1YTQ1MmJiYWE1NDU1OGZjYjYyZTU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2ZDVlNDViNWM2NTQ4MGY4MzQ1MTdhNWY5Y2M0ZDlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE1MzA0OTQ2NTI3NjEsLTc0LjA2OTgwNTI2NzE2MTQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwYmY4ZjU4YjNkYTQ3MjI4NWFmMTc4M2ZjODdhYTNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2Y2Q5NWVhZDE1MjQ3M2ZhMzA4ODU5MTgzMDM4YWEwID0gJCgnPGRpdiBpZD0iaHRtbF8xNmNkOTVlYWQxNTI0NzNmYTMwODg1OTE4MzAzOGFhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Um9zZWJhbms8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwYmY4ZjU4YjNkYTQ3MjI4NWFmMTc4M2ZjODdhYTNmLnNldENvbnRlbnQoaHRtbF8xNmNkOTVlYWQxNTI0NzNmYTMwODg1OTE4MzAzOGFhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNmQ1ZTQ1YjVjNjU0ODBmODM0NTE3YTVmOWNjNGQ5ZC5iaW5kUG9wdXAocG9wdXBfNTBiZjhmNThiM2RhNDcyMjg1YWYxNzgzZmM4N2FhM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzhkMzU4NmJmOGU3NDhmYjg3ZTdkYWJhMDUwNjJhNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzE4Nzg5MjY1NDYwNywtNzQuMTA3MTgxNzgyNjU2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTMyZDMzY2IyZjU0Zjc1YjBjODZlMzcwZTM5ODhiNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NThjNzA5Zjc0NTE0YmEzYmMwZWQxZWZiMjdjMzQxMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjU4YzcwOWY3NDUxNGJhM2JjMGVkMWVmYjI3YzM0MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgQnJpZ2h0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5MzJkMzNjYjJmNTRmNzViMGM4NmUzNzBlMzk4OGI0LnNldENvbnRlbnQoaHRtbF82NThjNzA5Zjc0NTE0YmEzYmMwZWQxZWZiMjdjMzQxMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOGQzNTg2YmY4ZTc0OGZiODdlN2RhYmEwNTA2MmE3MS5iaW5kUG9wdXAocG9wdXBfOTkzMmQzM2NiMmY1NGY3NWIwYzg2ZTM3MGUzOTg4YjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzYzNTI4ZGVlMDU0NDY3NTg1M2ZmNWFmOTg0Yjk1YzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MjQxODQ3OTEzMTMwMDYsLTc0LjA4NzI0ODE5OTgzNzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzOTFiNzllM2U2MzQxZjU4NjVlOGU5NTllNjFhMDlkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0NTMzOWZjNGIxMTQwNmI5MTA4YTY1NDU0YzBlM2IwID0gJCgnPGRpdiBpZD0iaHRtbF8wNDUzMzlmYzRiMTE0MDZiOTEwOGE2NTQ1NGMwZTNiMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3J5bWVzIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzOTFiNzllM2U2MzQxZjU4NjVlOGU5NTllNjFhMDlkLnNldENvbnRlbnQoaHRtbF8wNDUzMzlmYzRiMTE0MDZiOTEwOGE2NTQ1NGMwZTNiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNjM1MjhkZWUwNTQ0Njc1ODUzZmY1YWY5ODRiOTVjMi5iaW5kUG9wdXAocG9wdXBfZjM5MWI3OWUzZTYzNDFmNTg2NWU4ZTk1OWU2MWEwOWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2MxMWFkNTc5MmU3NDUxYWJiYzA3OTVkM2FlMjE4MmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTcwNjg1MTgxNDY3MywtNzQuMTExMzI4ODE4MDA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDE2N2FjYjIyZmM0ZjAxODRlYzkwZWJmOWFiN2RiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGI1MWQ2YjRlNWI0ZjM2ODhlNDE0ODI4YTViNTA0NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzRiNTFkNmI0ZTViNGYzNjg4ZTQxNDgyOGE1YjUwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvZHQgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQxNjdhY2IyMmZjNGYwMTg0ZWM5MGViZjlhYjdkYjUuc2V0Q29udGVudChodG1sXzc0YjUxZDZiNGU1YjRmMzY4OGU0MTQ4MjhhNWI1MDQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdjMTFhZDU3OTJlNzQ1MWFiYmMwNzk1ZDNhZTIxODJmLmJpbmRQb3B1cChwb3B1cF9iZDE2N2FjYjIyZmM0ZjAxODRlYzkwZWJmOWFiN2RiNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTM0NzNkNGYyNjM0OTlkOWM2NzBkY2E4ZGE3MzYwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4MDI0NzQxMzUwOTU2LC03NC4wNzk1NTI5MjUzOTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2ODI0MzUwOWUxMDQ2Y2JhYWM2OTRmMTRhM2JlM2UxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwNjg1OTg4YzNiOTQyZDJhYmYzZjhiOGU3MmRmMjdmID0gJCgnPGRpdiBpZD0iaHRtbF9lMDY4NTk4OGMzYjk0MmQyYWJmM2Y4YjhlNzJkZjI3ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGggQmVhY2g8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2ODI0MzUwOWUxMDQ2Y2JhYWM2OTRmMTRhM2JlM2UxLnNldENvbnRlbnQoaHRtbF9lMDY4NTk4OGMzYjk0MmQyYWJmM2Y4YjhlNzJkZjI3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZTM0NzNkNGYyNjM0OTlkOWM2NzBkY2E4ZGE3MzYwMC5iaW5kUG9wdXAocG9wdXBfZDY4MjQzNTA5ZTEwNDZjYmFhYzY5NGYxNGEzYmUzZTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTMwNTBjMGMyODhjNDYxNjhiYWIwYjEzOTgyYWQzMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MzM2NjkzMDU1NDM2NSwtNzQuMTI5NDM0MjY3OTcwMDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkxNWE5NDAzMDk1NDM2ZmI1ZGZjZDA4ZGJkYTM1NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRjMGMyNDgxZjk3NDQ2NmJkYjEwZGNjZmNjNjg2ZjggPSAkKCc8ZGl2IGlkPSJodG1sX2E0YzBjMjQ4MWY5NzQ0NjZiZGIxMGRjY2ZjYzY4NmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qb3J0IFJpY2htb25kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTE1YTk0MDMwOTU0MzZmYjVkZmNkMDhkYmRhMzU0Ny5zZXRDb250ZW50KGh0bWxfYTRjMGMyNDgxZjk3NDQ2NmJkYjEwZGNjZmNjNjg2ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTMwNTBjMGMyODhjNDYxNjhiYWIwYjEzOTgyYWQzMTYuYmluZFBvcHVwKHBvcHVwXzg5MTVhOTQwMzA5NTQzNmZiNWRmY2QwOGRiZGEzNTQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1NmFmN2E3OGMzZjRkZjQ5ZWJlYmVhMjdlMjQ4YTI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjMyNTQ2MzkwNDgxMTI0LC03NC4xNTAwODUzNzA0Njk4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Mjg0YjA5NDM5MTY0ZDI5YjlkMGU4ZjU0ZTQ1NGNlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOGNlYzYzYmEwMDc0NjAyYjQzOWViYjhhYzQ3OWQ0MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjhjZWM2M2JhMDA3NDYwMmI0MzllYmI4YWM0NzlkNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmluZXImIzM5O3MgSGFyYm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Mjg0YjA5NDM5MTY0ZDI5YjlkMGU4ZjU0ZTQ1NGNlOC5zZXRDb250ZW50KGh0bWxfZjhjZWM2M2JhMDA3NDYwMmI0MzllYmI4YWM0NzlkNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODU2YWY3YTc4YzNmNGRmNDllYmViZWEyN2UyNDhhMjcuYmluZFBvcHVwKHBvcHVwXzUyODRiMDk0MzkxNjRkMjliOWQwZThmNTRlNDU0Y2U4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlYzBiYWQ2YzEzNDRlODc4ZjEwNjczODIwMjVmYmNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjM5NjgyOTc4NDU1NDIsLTc0LjE3NDY0NTMyOTkzNTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjN2I3NDUyMzFjNzQ4MTJhODBkMjM4YjJjNTJkYmFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmMGY0OTg0MzY1ZjQ2YzE4ZDgwYzk0OTdhYWJkNTI0ID0gJCgnPGRpdiBpZD0iaHRtbF80ZjBmNDk4NDM2NWY0NmMxOGQ4MGM5NDk3YWFiZDUyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UG9ydCBJdm9yeTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWM3Yjc0NTIzMWM3NDgxMmE4MGQyMzhiMmM1MmRiYWEuc2V0Q29udGVudChodG1sXzRmMGY0OTg0MzY1ZjQ2YzE4ZDgwYzk0OTdhYWJkNTI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlYzBiYWQ2YzEzNDRlODc4ZjEwNjczODIwMjVmYmNkLmJpbmRQb3B1cChwb3B1cF8xYzdiNzQ1MjMxYzc0ODEyYTgwZDIzOGIyYzUyZGJhYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDNiOWFkNDIzNDc0ZWU5YjM1MDY0Mjc5MzkwY2I4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYxMzMzNTkzNzY2NzQyLC03NC4xMTkxODA1ODUzNDg0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWY0MWQwNGQ3ZTg0ZjRmYjM4ZDNhZWZjMDFjYTI1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YTU3MmMzZDA1NjE0NjViODhmNDkwYjIzMTA4ZmVjMyA9ICQoJzxkaXYgaWQ9Imh0bWxfN2E1NzJjM2QwNTYxNDY1Yjg4ZjQ5MGIyMzEwOGZlYzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhc3RsZXRvbiBDb3JuZXJzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWY0MWQwNGQ3ZTg0ZjRmYjM4ZDNhZWZjMDFjYTI1OS5zZXRDb250ZW50KGh0bWxfN2E1NzJjM2QwNTYxNDY1Yjg4ZjQ5MGIyMzEwOGZlYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQzYjlhZDQyMzQ3NGVlOWIzNTA2NDI3OTM5MGNiODIuYmluZFBvcHVwKHBvcHVwXzE5ZjQxZDA0ZDdlODRmNGZiMzhkM2FlZmMwMWNhMjU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmYTc2ZjhjMDVkOTRlNGZhZjRmNDQ4YmMzNGM4YTRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTk0MjUyMzc5MTYxNjk1LC03NC4xNjQ5NjAzMTMyOTgyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDYxYjY0OWQ5NmQ0OWM1OGUwYTUwYjdhNDZjODJhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2YzMGE1YzI3NmI0NDNjOWRlM2Y0MWFiN2FlZGMzYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdmMzBhNWMyNzZiNDQzYzlkZTNmNDFhYjdhZWRjM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBTcHJpbmd2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQ2MWI2NDlkOTZkNDljNThlMGE1MGI3YTQ2YzgyYWQuc2V0Q29udGVudChodG1sXzA3ZjMwYTVjMjc2YjQ0M2M5ZGUzZjQxYWI3YWVkYzNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBmYTc2ZjhjMDVkOTRlNGZhZjRmNDQ4YmMzNGM4YTRkLmJpbmRQb3B1cChwb3B1cF9jNDYxYjY0OWQ5NmQ0OWM1OGUwYTUwYjdhNDZjODJhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYWJhMjBhNjZjNTM0M2MzOTZhYmU5ZTUwNjFmYjY5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4NjMxMzc1MTAzMjgxLC03NC4xOTA3MzcxNzUzODExNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYWQzZmNlZTk2OGM0OTBhYWQwZTI5NGYxN2UzYjRiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTRkNmFhYjllN2Y0NjAwYmIyOGExZWRkNDY5YzhhYiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2U0ZDZhYWI5ZTdmNDYwMGJiMjhhMWVkZDQ2OWM4YWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRyYXZpczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWFkM2ZjZWU5NjhjNDkwYWFkMGUyOTRmMTdlM2I0YjIuc2V0Q29udGVudChodG1sXzNlNGQ2YWFiOWU3ZjQ2MDBiYjI4YTFlZGQ0NjljOGFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhYmEyMGE2NmM1MzQzYzM5NmFiZTllNTA2MWZiNjkzLmJpbmRQb3B1cChwb3B1cF9lYWQzZmNlZTk2OGM0OTBhYWQwZTI5NGYxN2UzYjRiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNzA2YmFmNWMyNmE0ZTUyOWU0MzdiOGU4NDAyMmNlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3MjU3MjMxODIwNjMyLC03NC4xMTY0Nzk0MzYwNjM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE4YTI5ZTcyMzczZjQyYzBhOGQ2MTZlNDZlMDU0MDYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2Yzc1NDBkNmM0NzQ1ZmJhMzhmOTg5ZDBlNDNhMGNiID0gJCgnPGRpdiBpZD0iaHRtbF9iNmM3NTQwZDZjNDc0NWZiYTM4Zjk4OWQwZTQzYTBjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3IERvcnA8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4YTI5ZTcyMzczZjQyYzBhOGQ2MTZlNDZlMDU0MDYwLnNldENvbnRlbnQoaHRtbF9iNmM3NTQwZDZjNDc0NWZiYTM4Zjk4OWQwZTQzYTBjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNzA2YmFmNWMyNmE0ZTUyOWU0MzdiOGU4NDAyMmNlMy5iaW5kUG9wdXAocG9wdXBfMThhMjllNzIzNzNmNDJjMGE4ZDYxNmU0NmUwNTQwNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmQyZDc1OGQ5ZTllNGE1NWJkNGExMTRlYmMzZTVkYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NTg0NjIyNDMyODg4LC03NC4xMjE1NjU5Mzc3MTg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTFkYTk5NWJiMmQ0YTc3OWFjODk3MDhjMzg3MTMzNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNWZhY2Q0ZWU0ZDA0MGJkOTkzZDViMWY0MDMwMDZhOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTVmYWNkNGVlNGQwNDBiZDk5M2Q1YjFmNDAzMDA2YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9ha3dvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxMWRhOTk1YmIyZDRhNzc5YWM4OTcwOGMzODcxMzM2LnNldENvbnRlbnQoaHRtbF9lNWZhY2Q0ZWU0ZDA0MGJkOTkzZDViMWY0MDMwMDZhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZDJkNzU4ZDllOWU0YTU1YmQ0YTExNGViYzNlNWRhNi5iaW5kUG9wdXAocG9wdXBfYzExZGE5OTViYjJkNGE3NzlhYzg5NzA4YzM4NzEzMzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDUxOTZhZWM3MzgwNDFkNDkyNmIwY2FjNDVmYjZlMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDk0ODAyMjg3MTM2MDUsLTc0LjE0OTMyMzgxNDkwOTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhODlmNzY0OGE4MzRkN2E5ZTdjOWY3OGNhMzFjYTlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3ODU5NmVhZDk4ODQwNDdhZDg3ZTI3ZTUzZjI1ZjczID0gJCgnPGRpdiBpZD0iaHRtbF8wNzg1OTZlYWQ5ODg0MDQ3YWQ4N2UyN2U1M2YyNWY3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlYXQgS2lsbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhODlmNzY0OGE4MzRkN2E5ZTdjOWY3OGNhMzFjYTlmLnNldENvbnRlbnQoaHRtbF8wNzg1OTZlYWQ5ODg0MDQ3YWQ4N2UyN2U1M2YyNWY3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTE5NmFlYzczODA0MWQ0OTI2YjBjYWM0NWZiNmUzOC5iaW5kUG9wdXAocG9wdXBfNWE4OWY3NjQ4YTgzNGQ3YTllN2M5Zjc4Y2EzMWNhOWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmQ0ZDViZjY5ODBlNDZmYjhiOWVlZWM2YTYyMTQ0OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NDIyMzA3NDc0NTA3NDUsLTc0LjE2NDMzMDgwNDE5MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTc4ZDhmMDViNzJlNDEwZWFjZGQyNGE2N2RkMzNiMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjZkMjc2YTdlNzRmNDQ0ZmFhNmY2ZDQ2NWE0ODNjNjUgPSAkKCc8ZGl2IGlkPSJodG1sXzI2ZDI3NmE3ZTc0ZjQ0NGZhYTZmNmQ0NjVhNDgzYzY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbHRpbmd2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc4ZDhmMDViNzJlNDEwZWFjZGQyNGE2N2RkMzNiMDUuc2V0Q29udGVudChodG1sXzI2ZDI3NmE3ZTc0ZjQ0NGZhYTZmNmQ0NjVhNDgzYzY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkNGQ1YmY2OTgwZTQ2ZmI4YjllZWVjNmE2MjE0NDhlLmJpbmRQb3B1cChwb3B1cF85NzhkOGYwNWI3MmU0MTBlYWNkZDI0YTY3ZGQzM2IwNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWJmNThjMGM5MGI0MjczYjg3NWE2ZThjZDZkYmE5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUzODExNDE3NDc0NTA3LC03NC4xNzg1NDg2NjE2NTg3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTE2Njc2NGExZmM0MzRiOTdlZTA2ZWYzMDI5ZDI2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTQ5OWU1Y2MzNTU0M2ZmYWZmMzVlMDQyODRhNTcyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWU0OTllNWNjMzU1NDNmZmFmZjM1ZTA0Mjg0YTU3MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFubmFkYWxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTE2Njc2NGExZmM0MzRiOTdlZTA2ZWYzMDI5ZDI2NC5zZXRDb250ZW50KGh0bWxfNWU0OTllNWNjMzU1NDNmZmFmZjM1ZTA0Mjg0YTU3MjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWFiZjU4YzBjOTBiNDI3M2I4NzVhNmU4Y2Q2ZGJhOWEuYmluZFBvcHVwKHBvcHVwX2E1MTY2NzY0YTFmYzQzNGI5N2VlMDZlZjMwMjlkMjY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxNWIwNmVlMTY5ZTQzOTZhOTJkMGU5NDJkMjE4MmYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTQxOTY3NjIyODg4NzU1LC03NC4yMDUyNDU4MjQ4MDMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzQ4ZDg5NDA5ZWE0ZWNiYjQ1ODI3YjVmZGY1MjE3MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjhjNzUyOWMwZjY0NjJjOWY0NTZlMjNjMDZhYzRhOCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWY4Yzc1MjljMGY2NDYyYzlmNDU2ZTIzYzA2YWM0YTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvb2Ryb3c8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3NDhkODk0MDllYTRlY2JiNDU4MjdiNWZkZjUyMTcwLnNldENvbnRlbnQoaHRtbF81ZjhjNzUyOWMwZjY0NjJjOWY0NTZlMjNjMDZhYzRhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MTViMDZlZTE2OWU0Mzk2YTkyZDBlOTQyZDIxODJmMC5iaW5kUG9wdXAocG9wdXBfZDc0OGQ4OTQwOWVhNGVjYmI0NTgyN2I1ZmRmNTIxNzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzYyNzY2OTc5Mzg5NGJhZWI4MzBhYjZmZGFiYjMzOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MDUzMzM3NjExNTY0MiwtNzQuMjQ2NTY5MzQyMzUyODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTVlZjRjODBmNDRiNDdjNDkzNDZmNjNkYmM0ZGQyYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTYzOTk1ZmRlYTNhNDk3Mzk5NTYzZDY5YjEwMWM4ZDAgPSAkKCc8ZGl2IGlkPSJodG1sXzU2Mzk5NWZkZWEzYTQ5NzM5OTU2M2Q2OWIxMDFjOGQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub3R0ZW52aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTVlZjRjODBmNDRiNDdjNDkzNDZmNjNkYmM0ZGQyYWUuc2V0Q29udGVudChodG1sXzU2Mzk5NWZkZWEzYTQ5NzM5OTU2M2Q2OWIxMDFjOGQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2Mjc2Njk3OTM4OTRiYWViODMwYWI2ZmRhYmIzMzkyLmJpbmRQb3B1cChwb3B1cF9lNWVmNGM4MGY0NGI0N2M0OTM0NmY2M2RiYzRkZDJhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmZkNTNkNjllNjE0MzhkYmMzYWVjOTc3YmZlNThlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzNzMxNjA2NzExMDMyNiwtNzQuMDgwNTUzNTE3OTAxMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjc2ZDI5NTBkOTc3NGY4N2I1YTQwMGNmOTJkNWIyYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTBjOGE2OThlMjlhNDQzYWEwMjI3YTYyOWIxYjI5ZGQgPSAkKCc8ZGl2IGlkPSJodG1sXzkwYzhhNjk4ZTI5YTQ0M2FhMDIyN2E2MjliMWIyOWRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub21wa2luc3ZpbGxlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzZkMjk1MGQ5Nzc0Zjg3YjVhNDAwY2Y5MmQ1YjJiNy5zZXRDb250ZW50KGh0bWxfOTBjOGE2OThlMjlhNDQzYWEwMjI3YTYyOWIxYjI5ZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JmZDUzZDY5ZTYxNDM4ZGJjM2FlYzk3N2JmZTU4ZTMuYmluZFBvcHVwKHBvcHVwXzI3NmQyOTUwZDk3NzRmODdiNWE0MDBjZjkyZDViMmI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhNjI5MTA4OGRhOTQ1ODJiNzlkYmVhZGE3OTRiMWQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE5MTkzMTA3OTI2NzYsLTc0LjA5NjI5MDI5MjM1NDU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2ZTAwNTMzMzc2NDQwYzc4MjQ4NzczZGQyZTY3NDA5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0ZDQ0NmEwNTZiMDRkMWFhNDg3YTIxMmE3ZmZmYzI1ID0gJCgnPGRpdiBpZD0iaHRtbF9iNGQ0NDZhMDU2YjA0ZDFhYTQ4N2EyMTJhN2ZmZmMyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2lsdmVyIExha2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2ZTAwNTMzMzc2NDQwYzc4MjQ4NzczZGQyZTY3NDA5LnNldENvbnRlbnQoaHRtbF9iNGQ0NDZhMDU2YjA0ZDFhYTQ4N2EyMTJhN2ZmZmMyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYTYyOTEwODhkYTk0NTgyYjc5ZGJlYWRhNzk0YjFkMy5iaW5kUG9wdXAocG9wdXBfYjZlMDA1MzMzNzY0NDBjNzgyNDg3NzNkZDJlNjc0MDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjIzMTNlZDUwMjE5NDc0MDhhM2JhZDUzMzRkYTRmMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTI3NjAxNTc1NjQ4OSwtNzQuMDk3MTI1NTIxNzg1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYjdmZjBiMGU1MTU0NTAzOGE0ZWM3Zjg4NzdjYTdlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YzA3NmU1Mzc1OWY0Y2QyODBmOTRjN2UzN2I4ZGQyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWMwNzZlNTM3NTlmNGNkMjgwZjk0YzdlMzdiOGRkMjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1bm55c2lkZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I3ZmYwYjBlNTE1NDUwMzhhNGVjN2Y4ODc3Y2E3ZWIuc2V0Q29udGVudChodG1sXzVjMDc2ZTUzNzU5ZjRjZDI4MGY5NGM3ZTM3YjhkZDIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyMzEzZWQ1MDIxOTQ3NDA4YTNiYWQ1MzM0ZGE0ZjBlLmJpbmRQb3B1cChwb3B1cF8zYjdmZjBiMGU1MTU0NTAzOGE0ZWM3Zjg4NzdjYTdlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NmU4ZTcxNTBmODU0MGE5YTJlZjZlNjU5ZDIzOTdmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwOTE5MDQ0NDM0NTU4LC03NC4wODAxNTczNDkzNjI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTM4N2JhOWYzNjA0NDQ1ODZmNjA3NzJhZDM0MDdhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MGI5ODMxYzJlMzg0MGVjYTFmNTliYWFiNDEzYWY4NSA9ICQoJzxkaXYgaWQ9Imh0bWxfODBiOTgzMWMyZTM4NDBlY2ExZjU5YmFhYjQxM2FmODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhcmsgSGlsbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTkzODdiYTlmMzYwNDQ0NTg2ZjYwNzcyYWQzNDA3YTcuc2V0Q29udGVudChodG1sXzgwYjk4MzFjMmUzODQwZWNhMWY1OWJhYWI0MTNhZjg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg2ZThlNzE1MGY4NTQwYTlhMmVmNmU2NTlkMjM5N2Y0LmJpbmRQb3B1cChwb3B1cF85OTM4N2JhOWYzNjA0NDQ1ODZmNjA3NzJhZDM0MDdhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NDBjMzM0Mjk3MzQ0MGJlODdmNGYyMjkyNzViNjVhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYyMTA5MDQ3Mjc1NDA5LC03NC4xMzMwNDE0Mzk1MTcwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZjY3OGVkYzI4M2U0ZTVjOTJhNTY2NzMxNGUzOGZjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTIwYWIxNjRmMzU0NTBlYjI0MzViMjlkOGY3YTdiYiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjEyMGFiMTY0ZjM1NDUwZWIyNDM1YjI5ZDhmN2E3YmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3RlcmxlaWdoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZjY3OGVkYzI4M2U0ZTVjOTJhNTY2NzMxNGUzOGZjYS5zZXRDb250ZW50KGh0bWxfZjEyMGFiMTY0ZjM1NDUwZWIyNDM1YjI5ZDhmN2E3YmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTQwYzMzNDI5NzM0NDBiZTg3ZjRmMjI5Mjc1YjY1YTguYmluZFBvcHVwKHBvcHVwX2NmNjc4ZWRjMjgzZTRlNWM5MmE1NjY3MzE0ZTM4ZmNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyYWYyZmYzNzJjODRmYjJiZWJhNWQwNmY5OTZkZGJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjIwMTcxNTEyMjMxODg0LC03NC4xNTMxNTI0NjM4Nzc2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yN2ExOGI0ZjgwMzg0ZTI3OTlhYmIyMWIxMDRlNDcxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2NiOWViNDczMTI0ZDM5OGJjOGIxYzlkZmZkZjM1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjNjYjllYjQ3MzEyNGQzOThiYzhiMWM5ZGZmZGYzNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW5pdGV2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdhMThiNGY4MDM4NGUyNzk5YWJiMjFiMTA0ZTQ3MTIuc2V0Q29udGVudChodG1sX2IzY2I5ZWI0NzMxMjRkMzk4YmM4YjFjOWRmZmRmMzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyYWYyZmYzNzJjODRmYjJiZWJhNWQwNmY5OTZkZGJkLmJpbmRQb3B1cChwb3B1cF8yN2ExOGI0ZjgwMzg0ZTI3OTlhYmIyMWIxMDRlNDcxMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMDI1OGE5YmI3M2Q0ZjJjYTMwNGJiMzM4ZjUwZmQxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzNTMyNTA5OTExNDkyLC03NC4xNjUxMDQyMDI0MTEyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZmNhMWE5MDdmNGY0MmI5YTVlNGM2MWRlZTVhNTQ1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NWUyOTA3OTA1NWE0M2UyODRmNjVhZDNlZWM1YjdmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjVlMjkwNzkwNTVhNDNlMjg0ZjY1YWQzZWVjNWI3ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFybGluZ3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGZjYTFhOTA3ZjRmNDJiOWE1ZTRjNjFkZWU1YTU0NTguc2V0Q29udGVudChodG1sXzY1ZTI5MDc5MDU1YTQzZTI4NGY2NWFkM2VlYzViN2ZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MwMjU4YTliYjczZDRmMmNhMzA0YmIzMzhmNTBmZDFhLmJpbmRQb3B1cChwb3B1cF80ZmNhMWE5MDdmNGY0MmI5YTVlNGM2MWRlZTVhNTQ1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZmMyMmYxYWU1MDg0YmZjODA2ZDEzNWI2NmY4NGFmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5NjMxMjU3MTI3NjczNCwtNzQuMDY3MTIzNjMyMjU1NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTljYjU0Zjg3OGFjNDQxOTllYWJlZTE2ODdjNTIyNGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJkNTExOTUwZmNhNDdkOGFiYzE5OTdiYWUxZjZhY2MgPSAkKCc8ZGl2IGlkPSJodG1sXzliZDUxMTk1MGZjYTQ3ZDhhYmMxOTk3YmFlMWY2YWNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BcnJvY2hhcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTljYjU0Zjg3OGFjNDQxOTllYWJlZTE2ODdjNTIyNGYuc2V0Q29udGVudChodG1sXzliZDUxMTk1MGZjYTQ3ZDhhYmMxOTk3YmFlMWY2YWNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmYzIyZjFhZTUwODRiZmM4MDZkMTM1YjY2Zjg0YWZmLmJpbmRQb3B1cChwb3B1cF9lOWNiNTRmODc4YWM0NDE5OWVhYmVlMTY4N2M1MjI0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yM2MwOThjNmYyMGM0NjE3OGVlN2NhOTUzMmYyMWExMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU5ODI2ODM1OTU5OTkxLC03NC4wNzY2NzQzNjI3OTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0OTE2ZTMzZGFhYjRmMjZiZGMyYjJlMDVlYTI5MzgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0YjdkMWQwMDJjYTRiMGRiYWI2NWRkOTRkZmJhMTU5ID0gJCgnPGRpdiBpZD0iaHRtbF82NGI3ZDFkMDAyY2E0YjBkYmFiNjVkZDk0ZGZiYTE1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3Jhc21lcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0OTE2ZTMzZGFhYjRmMjZiZGMyYjJlMDVlYTI5MzgyLnNldENvbnRlbnQoaHRtbF82NGI3ZDFkMDAyY2E0YjBkYmFiNjVkZDk0ZGZiYTE1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yM2MwOThjNmYyMGM0NjE3OGVlN2NhOTUzMmYyMWExMC5iaW5kUG9wdXAocG9wdXBfZTQ5MTZlMzNkYWFiNGYyNmJkYzJiMmUwNWVhMjkzODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzNhZjQ3NjZlMmJiNGYxN2I3ZGFlZWM3ZTNkZDkxZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41OTYzMjg5MTM3OTUxMywtNzQuMDg3NTExMTgwMDU1NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M3MzEyOTU2ZTY4NDEzNzhhZTYyZjQwZTA0ZWExZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmE0NTQ1ZTg2YjI2NDU2ODg1NGRmM2VjODhkMzBlZTggPSAkKCc8ZGl2IGlkPSJodG1sXzZhNDU0NWU4NmIyNjQ1Njg4NTRkZjNlYzg4ZDMwZWU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbGQgVG93bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M3MzEyOTU2ZTY4NDEzNzhhZTYyZjQwZTA0ZWExZGIuc2V0Q29udGVudChodG1sXzZhNDU0NWU4NmIyNjQ1Njg4NTRkZjNlYzg4ZDMwZWU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzYWY0NzY2ZTJiYjRmMTdiN2RhZWVjN2UzZGQ5MWU4LmJpbmRQb3B1cChwb3B1cF83YzczMTI5NTZlNjg0MTM3OGFlNjJmNDBlMDRlYTFkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZmU5OTA2YTdhZTE0NzM1OWRhMDg4M2M2YzY4NTZiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4ODY3Mjk0ODE5OTI3NSwtNzQuMDk2Mzk5MDUzMTI1MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE4M2YyYTMyZTA1NDBlNjhiZjhhMTc4YWUxZDhhYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2Q5ZjU3MjdkMGIxNDQ1M2I3YWZhZDc2MzYwNGVlN2YgPSAkKCc8ZGl2IGlkPSJodG1sXzNkOWY1NzI3ZDBiMTQ0NTNiN2FmYWQ3NjM2MDRlZTdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb25nYW4gSGlsbHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhODNmMmEzMmUwNTQwZTY4YmY4YTE3OGFlMWQ4YWE4LnNldENvbnRlbnQoaHRtbF8zZDlmNTcyN2QwYjE0NDUzYjdhZmFkNzYzNjA0ZWU3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZmU5OTA2YTdhZTE0NzM1OWRhMDg4M2M2YzY4NTZiYy5iaW5kUG9wdXAocG9wdXBfMWE4M2YyYTMyZTA1NDBlNjhiZjhhMTc4YWUxZDhhYTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVlZWM5ZGE5OWUxNGI4ZGEwNzAzZTE2NzA1OWE1MGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NzM1MjY5MDU3NDI4MywtNzQuMDkzNDgyNjYzMDM1OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWNlNmE3NjU0ZGVmNDVjZDkwNDAwYjFkZWMyMjdkMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA1Y2IxODg0NTk5NGQwOTg4MDgyNTY5ZWI1MDNkNDMgPSAkKCc8ZGl2IGlkPSJodG1sX2UwNWNiMTg4NDU5OTRkMDk4ODA4MjU2OWViNTAzZDQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWRsYW5kIEJlYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xY2U2YTc2NTRkZWY0NWNkOTA0MDBiMWRlYzIyN2QwYy5zZXRDb250ZW50KGh0bWxfZTA1Y2IxODg0NTk5NGQwOTg4MDgyNTY5ZWI1MDNkNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWVlZWM5ZGE5OWUxNGI4ZGEwNzAzZTE2NzA1OWE1MGYuYmluZFBvcHVwKHBvcHVwXzFjZTZhNzY1NGRlZjQ1Y2Q5MDQwMGIxZGVjMjI3ZDBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2NjQ5YmM3YWY2MjQ2NTE5MmY5NDI1MzU3YWI0NDY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTc2MjE1NTg3MTE3ODgsLTc0LjEwNTg1NTk4NTQ1NDM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmZjg4OWE4ZjMzNTRiODE4MjliN2MwMTQ4MmY1NjllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2NjBhMGMzOTc0MzQzNzRiNjVhNmE2YjUwNGNiYTI3ID0gJCgnPGRpdiBpZD0iaHRtbF9iNjYwYTBjMzk3NDM0Mzc0YjY1YTZhNmI1MDRjYmEyNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JhbnQgQ2l0eTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZmODg5YThmMzM1NGI4MTgyOWI3YzAxNDgyZjU2OWUuc2V0Q29udGVudChodG1sX2I2NjBhMGMzOTc0MzQzNzRiNjVhNmE2YjUwNGNiYTI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2NjQ5YmM3YWY2MjQ2NTE5MmY5NDI1MzU3YWI0NDY1LmJpbmRQb3B1cChwb3B1cF85ZmY4ODlhOGYzMzU0YjgxODI5YjdjMDE0ODJmNTY5ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNGI3MGFhMTY0N2Q0NzJmOTNjM2JlYTIyNmU3YTU0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU2NDI1NTQ5MzA3MzM1LC03NC4xMDQzMjcwNzQ2OTEyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDllNzFlODE4OGY0ZmQ0OGM1OTdjYWNiNmNlYmIxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzAxMzFmM2Q1MGE0NDQ4OWZhODAyYjI2ZjdhNzg5NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTMwMTMxZjNkNTBhNDQ0ODlmYTgwMmIyNmY3YTc4OTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ldyBEb3JwIEJlYWNoPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDllNzFlODE4OGY0ZmQ0OGM1OTdjYWNiNmNlYmIxNy5zZXRDb250ZW50KGh0bWxfMTMwMTMxZjNkNTBhNDQ0ODlmYTgwMmIyNmY3YTc4OTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzRiNzBhYTE2NDdkNDcyZjkzYzNiZWEyMjZlN2E1NGEuYmluZFBvcHVwKHBvcHVwX2UwOWU3MWU4MTg4ZjRmZDQ4YzU5N2NhY2I2Y2ViYjE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhY2RmZTRlMDcxYjRiOTRiMjVlMzBlZDdjZGUxZmE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTUzOTg4MDA4NTg0NjIsLTc0LjEzOTE2NjIyMTc1NzY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzMmVmNWYzY2E2OTQ0MmNhN2UxZmQ4YTE2OTYzNDYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0YTczZmU1MTg3NTQ0OWVhMjA3MTQyZTRjYjJjNTlhID0gJCgnPGRpdiBpZD0iaHRtbF80NGE3M2ZlNTE4NzU0NDllYTIwNzE0MmU0Y2IyYzU5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmF5IFRlcnJhY2U8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzMmVmNWYzY2E2OTQ0MmNhN2UxZmQ4YTE2OTYzNDYzLnNldENvbnRlbnQoaHRtbF80NGE3M2ZlNTE4NzU0NDllYTIwNzE0MmU0Y2IyYzU5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYWNkZmU0ZTA3MWI0Yjk0YjI1ZTMwZWQ3Y2RlMWZhNy5iaW5kUG9wdXAocG9wdXBfYTMyZWY1ZjNjYTY5NDQyY2E3ZTFmZDhhMTY5NjM0NjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjkzMWQ3MTQzZGI0NGExOGI0ZTgxMzM3NjFlOWY1MzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MzE5MTE5MjA0ODk2MDUsLTc0LjE5MTc0MTA1NzQ3ODE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2NDI4YzQwOGJlZDQ4NjliNGJmMmUyODkwM2Y4ZDYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxN2Y1ZTE0ZWY0OTQ5NjRhNmY4ZmI5NWIwMTliNjJmID0gJCgnPGRpdiBpZD0iaHRtbF9lMTdmNWUxNGVmNDk0OTY0YTZmOGZiOTViMDE5YjYyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SHVndWVub3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2NDI4YzQwOGJlZDQ4NjliNGJmMmUyODkwM2Y4ZDYyLnNldENvbnRlbnQoaHRtbF9lMTdmNWUxNGVmNDk0OTY0YTZmOGZiOTViMDE5YjYyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOTMxZDcxNDNkYjQ0YTE4YjRlODEzMzc2MWU5ZjUzMS5iaW5kUG9wdXAocG9wdXBfYjY0MjhjNDA4YmVkNDg2OWI0YmYyZTI4OTAzZjhkNjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzBkMzVlZjgyMDkxNGYzZDkzMDRkZTEzYzMzNTY0MTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MjQ2OTkzNzYxMTgxMzYsLTc0LjIxOTgzMTA2NjE2Nzc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxOTM1ODlkZDM3NDRiYThiNjIxZTcwNGM3M2FlYzk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E2NTU4YTZhNDM4ODRlOWQ5N2E0NzVhNGQ4MjVhYzZhID0gJCgnPGRpdiBpZD0iaHRtbF9hNjU1OGE2YTQzODg0ZTlkOTdhNDc1YTRkODI1YWM2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGxlYXNhbnQgUGxhaW5zPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTkzNTg5ZGQzNzQ0YmE4YjYyMWU3MDRjNzNhZWM5OC5zZXRDb250ZW50KGh0bWxfYTY1NThhNmE0Mzg4NGU5ZDk3YTQ3NWE0ZDgyNWFjNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzBkMzVlZjgyMDkxNGYzZDkzMDRkZTEzYzMzNTY0MTcuYmluZFBvcHVwKHBvcHVwXzAxOTM1ODlkZDM3NDRiYThiNjIxZTcwNGM3M2FlYzk4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0ZGJkMmZhYjBhZDRjNDZhODBiYmYyNjU0ODY0OTdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTA2MDgxNjUzNDYzMDUsLTc0LjIyOTUwMzUwMjYwMDI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5NTI1ZWIwZDQ3MzRlZDQ5MjM4MjAyNmFjNmE4YmI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmYzEwMjNmZDZkZTQ3MTJhZTFjYmExZmUzZmI2MGNiID0gJCgnPGRpdiBpZD0iaHRtbF83ZmMxMDIzZmQ2ZGU0NzEyYWUxY2JhMWZlM2ZiNjBjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnV0bGVyIE1hbm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTUyNWViMGQ0NzM0ZWQ0OTIzODIwMjZhYzZhOGJiNi5zZXRDb250ZW50KGh0bWxfN2ZjMTAyM2ZkNmRlNDcxMmFlMWNiYTFmZTNmYjYwY2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTRkYmQyZmFiMGFkNGM0NmE4MGJiZjI2NTQ4NjQ5N2YuYmluZFBvcHVwKHBvcHVwX2E5NTI1ZWIwZDQ3MzRlZDQ5MjM4MjAyNmFjNmE4YmI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0Zjc4NmU4YjMzMjQ0YmI4ZjM2M2NjZGU5OTM2OTg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTMwNTMxNDgyODMzMTQsLTc0LjIzMjE1Nzc1ODk2NTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3NjBmYWU5NjdlZDRkOTM4ZGNkMzVmZmI5NmFlZDMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhNjdmYTk1NGQyNzRhNjA5NzZmY2JkOWU0OTYwOWY1ID0gJCgnPGRpdiBpZD0iaHRtbF81YTY3ZmE5NTRkMjc0YTYwOTc2ZmNiZDllNDk2MDlmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hhcmxlc3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc2MGZhZTk2N2VkNGQ5MzhkY2QzNWZmYjk2YWVkMzAuc2V0Q29udGVudChodG1sXzVhNjdmYTk1NGQyNzRhNjA5NzZmY2JkOWU0OTYwOWY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0Zjc4NmU4YjMzMjQ0YmI4ZjM2M2NjZGU5OTM2OTg5LmJpbmRQb3B1cChwb3B1cF84NzYwZmFlOTY3ZWQ0ZDkzOGRjZDM1ZmZiOTZhZWQzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMzk4YWI5YTAwZDA0YzRhYjM4MGY4NzU2ZTViZDhjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU0OTQwNDAwNjUwMDcyLC03NC4yMTU3Mjg1MTExMzk1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTgyMDY3OWViOTE0OGFhODgyZGM5ODdlYjllM2I2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDE1YTljYjgzYzI0YjlhYmNlZDZjMTA3ZmI2YWMyNCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDQxNWE5Y2I4M2MyNGI5YWJjZWQ2YzEwN2ZiNmFjMjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvc3N2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU4MjA2NzllYjkxNDhhYTg4MmRjOTg3ZWI5ZTNiNjQuc2V0Q29udGVudChodG1sXzA0MTVhOWNiODNjMjRiOWFiY2VkNmMxMDdmYjZhYzI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzOThhYjlhMDBkMDRjNGFiMzgwZjg3NTZlNWJkOGM3LmJpbmRQb3B1cChwb3B1cF8yZTgyMDY3OWViOTE0OGFhODgyZGM5ODdlYjllM2I2NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NzZkMzU5YTFiMTg0OGJlYjE2NWU2ODlkZTA2ZWUxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU0OTI4NTgyMjc4MzIxLC03NC4xODU4ODY3NDU4Mzg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YmY5ZGFiOTBhZjA0ZjczODJkNzAwZTBmOTkzNWU2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTJkMGRiZmYyZTQ0MmU5YmEwNGUxNWJkNzQ0MGZmNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjEyZDBkYmZmMmU0NDJlOWJhMDRlMTViZDc0NDBmZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFyZGVuIEhlaWdodHM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiZjlkYWI5MGFmMDRmNzM4MmQ3MDBlMGY5OTM1ZTZmLnNldENvbnRlbnQoaHRtbF9mMTJkMGRiZmYyZTQ0MmU5YmEwNGUxNWJkNzQ0MGZmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NzZkMzU5YTFiMTg0OGJlYjE2NWU2ODlkZTA2ZWUxMC5iaW5kUG9wdXAocG9wdXBfN2JmOWRhYjkwYWYwNGY3MzgyZDcwMGUwZjk5MzVlNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2JiMzE0M2EyN2ZiNDZkNGI2NTNjNGI0MDM0MWU5MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NTUyOTUyMzYxNzMxOTQsLTc0LjE3MDc5NDE0Nzg2MDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1MTU4Yzk0ZTQ1YjQ2OGI5YTcxNDZhZWI3ODBiNjhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkODMyZTk4ZjNjNjQ2MTZhOGJhMjVhOTc4YmZlYTk4ID0gJCgnPGRpdiBpZD0iaHRtbF84ZDgzMmU5OGYzYzY0NjE2YThiYTI1YTk3OGJmZWE5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW5yaWRnZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjUxNThjOTRlNDViNDY4YjlhNzE0NmFlYjc4MGI2OGUuc2V0Q29udGVudChodG1sXzhkODMyZTk4ZjNjNjQ2MTZhOGJhMjVhOTc4YmZlYTk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiYjMxNDNhMjdmYjQ2ZDRiNjUzYzRiNDAzNDFlOTFmLmJpbmRQb3B1cChwb3B1cF9mNTE1OGM5NGU0NWI0NjhiOWE3MTQ2YWViNzgwYjY4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTcwMDllNDNhYjg0NzczYWRkNGFjYjdiZWY4NzNiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4OTEzODk0ODc1MjgxLC03NC4xNTkwMjIwODE1NjYwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWQzZDg2NjU0OTY0NDU1OTdiNzE4NDYxODU0NzUwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMTQwMDhhNGRiOGI0NzlhOGFjMGVlYjIzZjVhODM0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDE0MDA4YTRkYjhiNDc5YThhYzBlZWIyM2Y1YTgzNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlYXJ0bGFuZCBWaWxsYWdlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWQzZDg2NjU0OTY0NDU1OTdiNzE4NDYxODU0NzUwYi5zZXRDb250ZW50KGh0bWxfMDE0MDA4YTRkYjhiNDc5YThhYzBlZWIyM2Y1YTgzNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTU3MDA5ZTQzYWI4NDc3M2FkZDRhY2I3YmVmODczYjkuYmluZFBvcHVwKHBvcHVwXzRlZDNkODY2NTQ5NjQ0NTU5N2I3MTg0NjE4NTQ3NTBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzYTc1MDQ2MDQwYTQ5NDQ4NTc4ZGIzYjgwZDIyYjlhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTk0NzI2MDI3NDYyOTUsLTc0LjE4OTU2MDQ1NTE5NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTY1OGNmYTQzYThlNDA2ODg4NzNlOTEwYzMwMWFmMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JkNzAyNGQzOTIyNDU5ZDhlZjdhNThmZDQwNGEyMGIgPSAkKCc8ZGl2IGlkPSJodG1sXzNiZDcwMjRkMzkyMjQ1OWQ4ZWY3YTU4ZmQ0MDRhMjBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaGVsc2VhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjU4Y2ZhNDNhOGU0MDY4ODg3M2U5MTBjMzAxYWYwMC5zZXRDb250ZW50KGh0bWxfM2JkNzAyNGQzOTIyNDU5ZDhlZjdhNThmZDQwNGEyMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjNhNzUwNDYwNDBhNDk0NDg1NzhkYjNiODBkMjJiOWEuYmluZFBvcHVwKHBvcHVwX2U2NThjZmE0M2E4ZTQwNjg4ODczZTkxMGMzMDFhZjAwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkOWFmN2NkNWViZjQ4YzNhNjFiOGVjMDNlZDcwODQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjA1Nzc4Njg0NTIzNTgsLTc0LjE4NzI1NjM4MzgxNTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5ZGUxYzdiMzAxZDQ5MjA5NmNhYTA1M2E2Njk1OTBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5Yzk2ODEyOGZlNTRmNzM5NjUzODMzMmUwMmM0NTcxID0gJCgnPGRpdiBpZD0iaHRtbF82OWM5NjgxMjhmZTU0ZjczOTY1MzgzMzJlMDJjNDU3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qmxvb21maWVsZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDlkZTFjN2IzMDFkNDkyMDk2Y2FhMDUzYTY2OTU5MGIuc2V0Q29udGVudChodG1sXzY5Yzk2ODEyOGZlNTRmNzM5NjUzODMzMmUwMmM0NTcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkOWFmN2NkNWViZjQ4YzNhNjFiOGVjMDNlZDcwODQyLmJpbmRQb3B1cChwb3B1cF9kOWRlMWM3YjMwMWQ0OTIwOTZjYWEwNTNhNjY5NTkwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzg3YTZkMGIwMTQ0MmEzOTI1NzBjMTgyYjEzMTRiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwOTU5MTgwMDQyMDMsLTc0LjE1OTQwOTQ4NjU3MTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2NjYyZDRkODc3NjRhN2I5ZWQzMThjOGE1ZmM5NGI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1ZTQ0MDFiOTc4MTQzNzk5NzFjNjhiMzZhMjJmYjRkID0gJCgnPGRpdiBpZD0iaHRtbF82NWU0NDAxYjk3ODE0Mzc5OTcxYzY4YjM2YTIyZmI0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnVsbHMgSGVhZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzY2NjJkNGQ4Nzc2NGE3YjllZDMxOGM4YTVmYzk0YjUuc2V0Q29udGVudChodG1sXzY1ZTQ0MDFiOTc4MTQzNzk5NzFjNjhiMzZhMjJmYjRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MzODdhNmQwYjAxNDQyYTM5MjU3MGMxODJiMTMxNGI4LmJpbmRQb3B1cChwb3B1cF9jNjY2MmQ0ZDg3NzY0YTdiOWVkMzE4YzhhNWZjOTRiNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jY2UyNDNkMzE2ODE0MWY0OTUwMTE3NjZlNWE0ZjQ2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU2OTYwNTk0Mjc1NTA1LC03NC4xMzQwNTcyOTg2MjU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkYTk5MGNhZTZjYTQzMTdiMjM2Yzk2NWMyNTQ0MTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyZmU1ZjAyZWJkNzRlZjk5ZTc0M2YwNDU0ZTU4ZmNkID0gJCgnPGRpdiBpZD0iaHRtbF83MmZlNWYwMmViZDc0ZWY5OWU3NDNmMDQ1NGU1OGZjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmljaG1vbmQgVG93bjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRhOTkwY2FlNmNhNDMxN2IyMzZjOTY1YzI1NDQxNmQuc2V0Q29udGVudChodG1sXzcyZmU1ZjAyZWJkNzRlZjk5ZTc0M2YwNDU0ZTU4ZmNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjZTI0M2QzMTY4MTQxZjQ5NTAxMTc2NmU1YTRmNDZhLmJpbmRQb3B1cChwb3B1cF84ZGE5OTBjYWU2Y2E0MzE3YjIzNmM5NjVjMjU0NDE2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZTM5MzA4NjQ0YjM0MzkxOWVmYWVhYWNmNDFhMDNjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwOTcxOTM0MDc5Mjg0LC03NC4wNjY2Nzc2NjA2MTc3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZmVhMjNkNTU5NWE0YjE3OWIzMmIwOTZkMzk1M2FjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDg3YTllZjc0NDM0M2EzYWM5MTgyNWYxOTFiZTk5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzA4N2E5ZWY3NDQzNDNhM2FjOTE4MjVmMTkxYmU5OTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNob3JlIEFjcmVzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZmVhMjNkNTU5NWE0YjE3OWIzMmIwOTZkMzk1M2FjYS5zZXRDb250ZW50KGh0bWxfNzA4N2E5ZWY3NDQzNDNhM2FjOTE4MjVmMTkxYmU5OTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2UzOTMwODY0NGIzNDM5MTllZmFlYWFjZjQxYTAzYzMuYmluZFBvcHVwKHBvcHVwXzZmZWEyM2Q1NTk1YTRiMTc5YjMyYjA5NmQzOTUzYWNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgyMDgzZjFmMGNmMDQwZjA5ZjQ0N2M5ZjZjYWY1ODMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjE5MTc4NDUyMDI4NDMsLTc0LjA3MjY0MjQ0NTQ4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTM1ZmE1Y2IzNzE0NzdhYWY3NjM0NjAwMTU4OTJjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTAzYjc2M2VkZTU0MzAwODJlMWJhYmE0N2JjMzUwMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWEwM2I3NjNlZGU1NDMwMDgyZTFiYWJhNDdiYzM1MDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaWZ0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1MzVmYTVjYjM3MTQ3N2FhZjc2MzQ2MDAxNTg5MmMwLnNldENvbnRlbnQoaHRtbF85YTAzYjc2M2VkZTU0MzAwODJlMWJhYmE0N2JjMzUwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MjA4M2YxZjBjZjA0MGYwOWY0NDdjOWY2Y2FmNTgzMS5iaW5kUG9wdXAocG9wdXBfNjUzNWZhNWNiMzcxNDc3YWFmNzYzNDYwMDE1ODkyYzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJkOTZkZjVkMTYwNDdmZTg3ODA1ZjZhYzY0ODY2ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MDQ0NzMxODk2ODc5LC03NC4wODQwMjM2NDc0MDM1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2JjZGZjMjRjZTg0YTFlODNlNWNmM2I0MTRiNjhhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODI5YzBkN2RmMWI0Mzc4Yjk4ZjU5MTM3OWQzM2Q4ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYzgyOWMwZDdkZjFiNDM3OGI5OGY1OTEzNzlkMzNkOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmNvcmQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzYmNkZmMyNGNlODRhMWU4M2U1Y2YzYjQxNGI2OGFlLnNldENvbnRlbnQoaHRtbF9jODI5YzBkN2RmMWI0Mzc4Yjk4ZjU5MTM3OWQzM2Q4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MmQ5NmRmNWQxNjA0N2ZlODc4MDVmNmFjNjQ4NjZlOC5iaW5kUG9wdXAocG9wdXBfMDNiY2RmYzI0Y2U4NGExZTgzZTVjZjNiNDE0YjY4YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNjMzBhMjk3NTE2NDkzMzk2NzAzMDYwMTUxOWQxYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MDY3OTQzOTQ4MDEsLTc0LjA5Nzc2MjA2OTcyNTIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5MThmZGI0NjhlNzRlYTk4MzUzNTFjZWY3ZTJhNzk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyODMwOGZiODllYzQyMDdiNWRlYTYxNDRhODU3NzQ0ID0gJCgnPGRpdiBpZD0iaHRtbF9mMjgzMDhmYjg5ZWM0MjA3YjVkZWE2MTQ0YTg1Nzc0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RW1lcnNvbiBIaWxsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTE4ZmRiNDY4ZTc0ZWE5ODM1MzUxY2VmN2UyYTc5NC5zZXRDb250ZW50KGh0bWxfZjI4MzA4ZmI4OWVjNDIwN2I1ZGVhNjE0NGE4NTc3NDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDNjMzBhMjk3NTE2NDkzMzk2NzAzMDYwMTUxOWQxYjYuYmluZFBvcHVwKHBvcHVwXzc5MThmZGI0NjhlNzRlYTk4MzUzNTFjZWY3ZTJhNzk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxZWEyNmJlMGQ0NzQ1OWY5ZjVkYWE1NmZmZjVlN2E4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjM1NjMwMDA2ODExNTEsLTc0LjA5ODA1MDYyMzczODg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3YTMxNThhNTkwNzRmOTU5NWMyZmRjNDI5OTUxZWFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmNmYwZTgwZjA5OTQ2NzViMGNlMjE1NzBiMDg2ZGI5ID0gJCgnPGRpdiBpZD0iaHRtbF80ZjZmMGU4MGYwOTk0Njc1YjBjZTIxNTcwYjA4NmRiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFuZGFsbCBNYW5vcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTdhMzE1OGE1OTA3NGY5NTk1YzJmZGM0Mjk5NTFlYWUuc2V0Q29udGVudChodG1sXzRmNmYwZTgwZjA5OTQ2NzViMGNlMjE1NzBiMDg2ZGI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxZWEyNmJlMGQ0NzQ1OWY5ZjVkYWE1NmZmZjVlN2E4LmJpbmRQb3B1cChwb3B1cF8xN2EzMTU4YTU5MDc0Zjk1OTVjMmZkYzQyOTk1MWVhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTBkMmU0YjVmZWE0MTEzYWYxYWYzODM5NjljM2RjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzODQzMjgzNzk0Nzk1LC03NC4xODYyMjMzMTc0OTgyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDZkNDNjY2VlNzg0NmU0OGU5M2E4ZDI4MjMwZTZhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjgyMDgxNzQ2NzQ0MzVkYTdlYTVjMTMwZTdlYjgxMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZjI4MjA4MTc0Njc0NDM1ZGE3ZWE1YzEzMGU3ZWI4MTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvd2xhbmQgSG9vazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQ2ZDQzY2NlZTc4NDZlNDhlOTNhOGQyODIzMGU2YTkuc2V0Q29udGVudChodG1sX2YyODIwODE3NDY3NDQzNWRhN2VhNWMxMzBlN2ViODEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVhMGQyZTRiNWZlYTQxMTNhZjFhZjM4Mzk2OWMzZGM4LmJpbmRQb3B1cChwb3B1cF85ZDZkNDNjY2VlNzg0NmU0OGU5M2E4ZDI4MjMwZTZhOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTBjMjhjZTBlM2Y0OGRhOTMzZjk0NjhhZGY3MTBjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYzMDE0Njc0MTE5MzgyNiwtNzQuMTQxODE2Nzg5Njg4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzVkYTAxMmZiNWQ0MzM0YjgwNDMxMDM0YzY3MjU2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ODU2ZmVmNDU3NzI0MDI2OTY4ODNhMWM1OWY5YmExMSA9ICQoJzxkaXYgaWQ9Imh0bWxfODg1NmZlZjQ1NzcyNDAyNjk2ODgzYTFjNTlmOWJhMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkVsbSBQYXJrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzVkYTAxMmZiNWQ0MzM0YjgwNDMxMDM0YzY3MjU2ZC5zZXRDb250ZW50KGh0bWxfODg1NmZlZjQ1NzcyNDAyNjk2ODgzYTFjNTlmOWJhMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzkwYzI4Y2UwZTNmNDhkYTkzM2Y5NDY4YWRmNzEwYzIuYmluZFBvcHVwKHBvcHVwXzQ3NWRhMDEyZmI1ZDQzMzRiODA0MzEwMzRjNjcyNTZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0NjdkZTMxM2E2MjQ1YmViZmM5ZDQ0OTcyMzlkOGEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjAxODA5NTc2MzE0NDQsLTc0LjEyMDU5Mzk5NzE4MDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogImJsdWUiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMzE4NmNjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2ExNzQyYjA4NWRkYzQxOGNiYjFhN2FhYjQ0OGFiMmRiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzMjI4MjhmNzQxMDQ1MGNiZGVjNzdmMzc1MGUyMDI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlNWQ1YTI3ZWViODRmNmE5MjVkYjM5MWUzMjU2ZGZhID0gJCgnPGRpdiBpZD0iaHRtbF82ZTVkNWEyN2VlYjg0ZjZhOTI1ZGIzOTFlMzI1NmRmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFub3IgSGVpZ2h0czwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjMyMjgyOGY3NDEwNDUwY2JkZWM3N2YzNzUwZTIwMjcuc2V0Q29udGVudChodG1sXzZlNWQ1YTI3ZWViODRmNmE5MjVkYjM5MWUzMjU2ZGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q0NjdkZTMxM2E2MjQ1YmViZmM5ZDQ0OTcyMzlkOGEwLmJpbmRQb3B1cChwb3B1cF82MzIyODI4Zjc0MTA0NTBjYmRlYzc3ZjM3NTBlMjAyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMzk3ZjI1YjM4ZGQ0ZWYxYWFlMmEzY2UxNWM1YTVmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjYwMzcwNjkyNjI3MzcxLC03NC4xMzIwODQ0NzQ4NDI5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmNjNTgxZWYyZjg0MjIxODgwYzY3ZTQxYWRiNDI5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTc0NmE5YTJkYmY0Mzk3Yjg2NmRkOTYzNzEwZWZkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzE3NDZhOWEyZGJmNDM5N2I4NjZkZDk2MzcxMGVmZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxvd2Jyb29rPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMmNjNTgxZWYyZjg0MjIxODgwYzY3ZTQxYWRiNDI5Yy5zZXRDb250ZW50KGh0bWxfNzE3NDZhOWEyZGJmNDM5N2I4NjZkZDk2MzcxMGVmZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjM5N2YyNWIzOGRkNGVmMWFhZTJhM2NlMTVjNWE1ZjguYmluZFBvcHVwKHBvcHVwX2MyY2M1ODFlZjJmODQyMjE4ODBjNjdlNDFhZGI0MjljKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxZDc1MDYzNzllMzQxZDM4MDdmNDQxMGNiY2JkNGNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTQxMTM5OTIyMDkxNzY2LC03NC4yMTc3NjYzNjA2ODU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNGZiNDlkM2Q0NGQ0ZjA4OTY4ODljODBkYmMxNjE1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjg0N2RlYTRhOWE0M2NiODJlMjAzM2UyMzE4ZjM3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2Y4NDdkZWE0YTlhNDNjYjgyZTIwMzNlMjMxOGYzN2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhbmR5IEdyb3VuZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjRmYjQ5ZDNkNDRkNGYwODk2ODg5YzgwZGJjMTYxNTAuc2V0Q29udGVudChodG1sXzNmODQ3ZGVhNGE5YTQzY2I4MmUyMDMzZTIzMThmMzdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxZDc1MDYzNzllMzQxZDM4MDdmNDQxMGNiY2JkNGNhLmJpbmRQb3B1cChwb3B1cF9mNGZiNDlkM2Q0NGQ0ZjA4OTY4ODljODBkYmMxNjE1MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Yjc4OTNmMWZhMGQ0NjU5ODliNzJkYzc2NDdlM2JjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU3OTExODc0Mjk2MTIxNCwtNzQuMTI3MjcyNDA2MDQ5NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ0NTg0MjliMzRhNDdmMmE3NGRiZmI0ODYwZGY0N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQwYTcxN2Q4MDhiNDllZGE1MjZhMzViM2FhZGIzOWQgPSAkKCc8ZGl2IGlkPSJodG1sXzhkMGE3MTdkODA4YjQ5ZWRhNTI2YTM1YjNhYWRiMzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZ2JlcnR2aWxsZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ0NTg0MjliMzRhNDdmMmE3NGRiZmI0ODYwZGY0N2Yuc2V0Q29udGVudChodG1sXzhkMGE3MTdkODA4YjQ5ZWRhNTI2YTM1YjNhYWRiMzlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiNzg5M2YxZmEwZDQ2NTk4OWI3MmRjNzY0N2UzYmMwLmJpbmRQb3B1cChwb3B1cF9kZDQ1ODQyOWIzNGE0N2YyYTc0ZGJmYjQ4NjBkZjQ3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OWI1ZTQ2ZGU1MTQ0N2ZiYmIwMGMwNTM3YTg0YmVjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUyNjI2NDA2NzM0ODEyLC03NC4yMDE1MjU1NjQ1NzY1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibHVlIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMxODZjYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMTc0MmIwODVkZGM0MThjYmIxYTdhYWI0NDhhYjJkYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YjU5NmRmYzgzNzQ0OTM5YWY0NGZjNTUyNGZkMzNiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjdlOGZjMjU4Y2U0ZTBjODE3OTFjNTFkZGYzMjZlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2Y3ZThmYzI1OGNlNGUwYzgxNzkxYzUxZGRmMzI2ZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByaW5jZSYjMzk7cyBCYXk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiNTk2ZGZjODM3NDQ5MzlhZjQ0ZmM1NTI0ZmQzM2JkLnNldENvbnRlbnQoaHRtbF8zZjdlOGZjMjU4Y2U0ZTBjODE3OTFjNTFkZGYzMjZlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OWI1ZTQ2ZGU1MTQ0N2ZiYmIwMGMwNTM3YTg0YmVjNC5iaW5kUG9wdXAocG9wdXBfNGI1OTZkZmM4Mzc0NDkzOWFmNDRmYzU1MjRmZDMzYmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRkM2Y1YTQ4OWZjNDkyZDgyODQ5MzQzM2RlNTZlZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41NzY1MDYyOTM3OTQ4OSwtNzQuMTM3OTI2NjM3NzE1NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGVlODY1MTYxZjkxNDFmNWFhOGRhYTE4YWM3NGM0NmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDI0MmViZmRkOGZjNGZlMzkyMTVmYTNmNTM4NTM4MDYgPSAkKCc8ZGl2IGlkPSJodG1sX2QyNDJlYmZkZDhmYzRmZTM5MjE1ZmEzZjUzODUzODA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MaWdodGhvdXNlIEhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlZTg2NTE2MWY5MTQxZjVhYThkYWExOGFjNzRjNDZlLnNldENvbnRlbnQoaHRtbF9kMjQyZWJmZGQ4ZmM0ZmUzOTIxNWZhM2Y1Mzg1MzgwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NGQzZjVhNDg5ZmM0OTJkODI4NDkzNDMzZGU1NmVlZS5iaW5kUG9wdXAocG9wdXBfMGVlODY1MTYxZjkxNDFmNWFhOGRhYTE4YWM3NGM0NmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTFiOGMzYzgwMDljNDEzOTgzNDRmYjJhYjVhNjNjNTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MTk1NDE0NTc0ODkwOSwtNzQuMjI5NTcwODA2MjY5NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMzMTg2Y2MiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfYTE3NDJiMDg1ZGRjNDE4Y2JiMWE3YWFiNDQ4YWIyZGIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDRlNjBlYzFjNGI0NDk2ZWFkMGQ0ZmExZDJkNGQwZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjFiNmY5MTdjOGJiNGI2MDkzYWE4ZDY3Yzc1OGMwZmYgPSAkKCc8ZGl2IGlkPSJodG1sXzYxYjZmOTE3YzhiYjRiNjA5M2FhOGQ2N2M3NThjMGZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaWNobW9uZCBWYWxsZXk8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0ZTYwZWMxYzRiNDQ5NmVhZDBkNGZhMWQyZDRkMGRjLnNldENvbnRlbnQoaHRtbF82MWI2ZjkxN2M4YmI0YjYwOTNhYThkNjdjNzU4YzBmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMWI4YzNjODAwOWM0MTM5ODM0NGZiMmFiNWE2M2M1NS5iaW5kUG9wdXAocG9wdXBfMDRlNjBlYzFjNGI0NDk2ZWFkMGQ0ZmExZDJkNGQwZGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y0ODdiMjMyY2I3NGNlNWJkNGRkYjllZTdjNjE2ODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42MTczMTA3OTI1Mjk4MywtNzQuMDgxNzM5OTIyMTE5NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiYmx1ZSIsCiAg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment