@kepler.gl/reducers 3.3.0-alpha.17 → 3.3.0-alpha.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/column-edit-updaters.spec.js +116 -3
- package/dist/cjs/combined-updaters.js +28 -9
- package/dist/cjs/dataset-ops-updaters.spec.js +832 -2
- package/dist/cjs/ui-state-updaters.js +44 -9
- package/dist/cjs/vis-state-merger.js +24 -4
- package/dist/cjs/vis-state-updaters.js +444 -263
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +14 -4
- package/dist/composers.d.ts +13 -2
- package/dist/esm/column-edit-updaters.spec.js +114 -3
- package/dist/esm/combined-updaters.js +29 -10
- package/dist/esm/dataset-ops-updaters.spec.js +830 -1
- package/dist/esm/ui-state-updaters.js +44 -9
- package/dist/esm/vis-state-merger.js +26 -6
- package/dist/esm/vis-state-updaters.js +445 -265
- package/dist/esm/vis-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +1 -1
- package/dist/vis-state-updaters.d.ts +8 -9
- package/dist/vis-state.d.ts +8 -0
- package/package.json +16 -16
- package/dist/column-edit-updaters.spec.d.ts +0 -1
- package/dist/dataset-ops-updaters.spec.d.ts +0 -1
- package/dist/vis-state-merger-text-label.spec.d.ts +0 -1
|
@@ -36,16 +36,17 @@ import { DELAY_TASK, ACTION_TASK, EXPAND_ZIP_TASK, LOAD_FILE_TASK, PROCESS_FILE_
|
|
|
36
36
|
import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, expandZipArchiveSuccess, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress, setLoadingProgress } from '@kepler.gl/actions';
|
|
37
37
|
|
|
38
38
|
// Utils
|
|
39
|
-
import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, disableGpuIfInverted, filterTypeUsesGpu, getPlotBaseIndexByDataId, errorNotification, successNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isRasterTileExtractLayer, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
|
|
39
|
+
import { FILTER_UPDATER_PROPS, normalizeCameraBookmarks, normalizeCameraTour, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, areFilterFieldTypesCompatible, disableGpuIfInverted, filterTypeUsesGpu, getPlotBaseIndexByDataId, errorNotification, successNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isRasterTileExtractLayer, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
|
|
40
40
|
import { generateHashId, toArray, arrayMove } from '@kepler.gl/common-utils';
|
|
41
41
|
// Mergers
|
|
42
|
-
import { ALL_FIELD_TYPES, ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat, GEOCODER_DATASET_NAME, GEOCODER_ICON_COLOR, GEOCODER_LAYER_ID } from '@kepler.gl/constants';
|
|
42
|
+
import { ALL_FIELD_TYPES, ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_RULER_LENGTH_METERS, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat, GEOCODER_DATASET_NAME, GEOCODER_ICON_COLOR, GEOCODER_LAYER_ID } from '@kepler.gl/constants';
|
|
43
43
|
import { AGGREGATION_COUNT_LAYER_TYPES, isPointCountLabel, LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
|
|
44
44
|
import { apply_, compose_, filterOutById, if_, merge_, payload_, pick_, removeElementAtIndex, swap_ } from './composer-helpers';
|
|
45
45
|
import { isValidMerger, mergeStateFromMergers } from './merger-handler';
|
|
46
46
|
import { VIS_STATE_MERGERS, createLayerFromConfig, isSavedLayerConfigV1, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
|
|
47
47
|
import KeplerGLSchema from '@kepler.gl/schemas';
|
|
48
48
|
import { getFilesToParse, isZipFileName, loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
|
|
49
|
+
import { addMetersToLngLat } from '@math.gl/web-mercator';
|
|
49
50
|
import { buildChangeColumnTypeData, formatColumnTypeConversionError, assignGpuChannel, buildDeleteColumnData, buildRenameColumnData, canMutateDatasetSchema, copyTableAndUpdate, createNewDataEntry, pinTableColumns, showAllTableColumns, toggleHiddenTableColumn, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
|
|
50
51
|
import { remapChartsForDataset } from './column-edit-reconcile';
|
|
51
52
|
import { findFieldsToShow, getZoomOpacityAnnotationTargetId, removeLayerFromZoomOpacity } from './interaction-utils';
|
|
@@ -212,6 +213,9 @@ export var INITIAL_VIS_STATE = {
|
|
|
212
213
|
// charts (enabled by default; gated by enableChartsPanel)
|
|
213
214
|
charts: [],
|
|
214
215
|
chartsToBeMerged: [],
|
|
216
|
+
// camera bookmarks
|
|
217
|
+
cameraBookmarks: [],
|
|
218
|
+
cameraTour: null,
|
|
215
219
|
// annotations
|
|
216
220
|
annotations: [],
|
|
217
221
|
annotationsToBeMerged: [],
|
|
@@ -1076,11 +1080,14 @@ export function layerVisConfigChangeUpdater(state, action) {
|
|
|
1076
1080
|
var _calculateLayerData6 = calculateLayerData(newLayer, nextState, oldLayerData),
|
|
1077
1081
|
layerData = _calculateLayerData6.layerData,
|
|
1078
1082
|
layer = _calculateLayerData6.layer;
|
|
1079
|
-
|
|
1083
|
+
var updatedState = updateStateWithLayerAndData(nextState, {
|
|
1080
1084
|
layerData: layerData,
|
|
1081
1085
|
layer: layer,
|
|
1082
1086
|
idx: idx
|
|
1083
1087
|
});
|
|
1088
|
+
return newLayer.type === 'zarr' && props.some(function (p) {
|
|
1089
|
+
return p === 'zarrAxis' || p === 'zarrVariable';
|
|
1090
|
+
}) ? updateAnimationDomain(updatedState) : updatedState;
|
|
1084
1091
|
}
|
|
1085
1092
|
return updateStateWithLayerAndData(nextState, {
|
|
1086
1093
|
layer: newLayer,
|
|
@@ -1144,7 +1151,7 @@ export function setFilterAnimationWindowUpdater(state, _ref5) {
|
|
|
1144
1151
|
});
|
|
1145
1152
|
|
|
1146
1153
|
// Entering or leaving interval playback snaps the window onto histogram bins.
|
|
1147
|
-
if (filter.type === FILTER_TYPES.timeRange && (previousWindow === ANIMATION_WINDOW.interval || animationWindow === ANIMATION_WINDOW.interval)) {
|
|
1154
|
+
if ((filter.type === FILTER_TYPES.timeRange || filter.type === FILTER_TYPES.range) && (previousWindow === ANIMATION_WINDOW.interval || animationWindow === ANIMATION_WINDOW.interval)) {
|
|
1148
1155
|
var adjusted = adjustValueToAnimationWindow(state, nextFilter, getPlotBaseIndexByDataId(state.datasets, nextFilter, state.layers));
|
|
1149
1156
|
if (Array.isArray(adjusted.value) && adjusted.value.every(function (v) {
|
|
1150
1157
|
return Number.isFinite(v);
|
|
@@ -1152,9 +1159,16 @@ export function setFilterAnimationWindowUpdater(state, _ref5) {
|
|
|
1152
1159
|
nextFilter = adjusted;
|
|
1153
1160
|
}
|
|
1154
1161
|
}
|
|
1162
|
+
if (filter.type === FILTER_TYPES.range) {
|
|
1163
|
+
var filterIndex = state.filters.indexOf(filter);
|
|
1164
|
+
return setFilterUpdater(state, setFilter(filterIndex, ['animationWindow', 'value'], [animationWindow, nextFilter.value]));
|
|
1165
|
+
}
|
|
1155
1166
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1156
1167
|
filters: swap_(nextFilter)(state.filters)
|
|
1157
1168
|
});
|
|
1169
|
+
if (filter.type !== FILTER_TYPES.timeRange) {
|
|
1170
|
+
return newState;
|
|
1171
|
+
}
|
|
1158
1172
|
var newSyncTimelineMode = getSyncAnimationMode(nextFilter);
|
|
1159
1173
|
return setTimeFilterTimelineModeUpdater(newState, {
|
|
1160
1174
|
id: id,
|
|
@@ -1195,10 +1209,12 @@ export function applyFilterConfigUpdater(state, action) {
|
|
|
1195
1209
|
}
|
|
1196
1210
|
function updateFilterPlotsAfterFiltering(state, affectedDatasetIds, updatedFilterIndex) {
|
|
1197
1211
|
var filters = state.filters.map(function (filter, filterIndex) {
|
|
1212
|
+
var _filter$plotType;
|
|
1198
1213
|
if (filterIndex === updatedFilterIndex) {
|
|
1199
1214
|
return updateFilterPlot(state.datasets, filter, undefined, state.layers);
|
|
1200
1215
|
}
|
|
1201
|
-
|
|
1216
|
+
var shouldRefreshNumericPlot = filter.type === FILTER_TYPES.range && (!isSideFilter(filter) || ((_filter$plotType = filter.plotType) === null || _filter$plotType === void 0 ? void 0 : _filter$plotType.type) === PLOT_TYPES.lineChart);
|
|
1217
|
+
if (filter.type !== FILTER_TYPES.timeRange && !shouldRefreshNumericPlot) {
|
|
1202
1218
|
return filter;
|
|
1203
1219
|
}
|
|
1204
1220
|
var sharedDatasetIds = filter.dataId.filter(function (dataId) {
|
|
@@ -1288,9 +1304,73 @@ export function setFilterUpdater(state, action) {
|
|
|
1288
1304
|
}
|
|
1289
1305
|
return newState;
|
|
1290
1306
|
}
|
|
1291
|
-
function _updateFilterDataIdAtValueIndex(filter, valueIndex, value, datasets) {
|
|
1307
|
+
function _updateFilterDataIdAtValueIndex(filter, valueIndex, value, datasets, filters) {
|
|
1308
|
+
var currentDataId = filter.dataId[valueIndex];
|
|
1309
|
+
if (currentDataId && value && filter.dataId.length > 1) {
|
|
1310
|
+
var fieldName = filter.name[valueIndex];
|
|
1311
|
+
var endFieldName = toArray(filter.endName)[valueIndex];
|
|
1312
|
+
var previousValue = filter.value;
|
|
1313
|
+
var nextDataIds = filter.dataId.slice();
|
|
1314
|
+
nextDataIds[valueIndex] = value;
|
|
1315
|
+
var nextFilter = removeFilterPlot(filter, currentDataId);
|
|
1316
|
+
nextFilter = set(['dataId'], nextDataIds, nextFilter);
|
|
1317
|
+
for (var _i = 0, _arr = ['gpuChannel', 'gpuEndChannel']; _i < _arr.length; _i++) {
|
|
1318
|
+
var prop = _arr[_i];
|
|
1319
|
+
if (Array.isArray(nextFilter[prop])) {
|
|
1320
|
+
var nextChannels = nextFilter[prop].slice();
|
|
1321
|
+
nextChannels[valueIndex] = undefined;
|
|
1322
|
+
nextFilter = set([prop], nextChannels, nextFilter);
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
var dataset = datasets[value];
|
|
1326
|
+
var field = dataset === null || dataset === void 0 ? void 0 : dataset.fields.find(function (candidate) {
|
|
1327
|
+
return candidate.name === fieldName;
|
|
1328
|
+
});
|
|
1329
|
+
var canRebindField = field && (!filter.fieldType || areFilterFieldTypesCompatible(filter.fieldType, field.type));
|
|
1330
|
+
var _ref6 = canRebindField ? applyFilterFieldName(nextFilter, datasets, value, fieldName, valueIndex, {
|
|
1331
|
+
mergeDomain: true
|
|
1332
|
+
}) : {
|
|
1333
|
+
filter: null
|
|
1334
|
+
},
|
|
1335
|
+
reboundFilter = _ref6.filter;
|
|
1336
|
+
if (reboundFilter) {
|
|
1337
|
+
nextFilter = reboundFilter;
|
|
1338
|
+
} else {
|
|
1339
|
+
var nextNames = nextFilter.name.slice();
|
|
1340
|
+
var nextFieldIdx = nextFilter.fieldIdx.slice();
|
|
1341
|
+
nextNames[valueIndex] = '';
|
|
1342
|
+
nextFieldIdx[valueIndex] = -1;
|
|
1343
|
+
nextFilter = _objectSpread(_objectSpread({}, nextFilter), {}, {
|
|
1344
|
+
name: nextNames,
|
|
1345
|
+
fieldIdx: nextFieldIdx,
|
|
1346
|
+
gpu: false
|
|
1347
|
+
});
|
|
1348
|
+
}
|
|
1349
|
+
if (endFieldName && nextFilter.type === FILTER_TYPES.timeRange) {
|
|
1350
|
+
var _applyTimeFilterEndFi = applyTimeFilterEndFieldName(nextFilter, datasets, value, endFieldName, valueIndex),
|
|
1351
|
+
reboundEndFilter = _applyTimeFilterEndFi.filter;
|
|
1352
|
+
if (reboundEndFilter) {
|
|
1353
|
+
nextFilter = reboundEndFilter;
|
|
1354
|
+
} else {
|
|
1355
|
+
var _applyTimeFilterEndFi2 = applyTimeFilterEndFieldName(nextFilter, datasets, value, null, valueIndex),
|
|
1356
|
+
clearedEndFilter = _applyTimeFilterEndFi2.filter;
|
|
1357
|
+
nextFilter = clearedEndFilter || nextFilter;
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1360
|
+
var domainSteps = mergeFilterDomain(nextFilter, datasets);
|
|
1361
|
+
nextFilter = _objectSpread(_objectSpread({}, nextFilter), domainSteps ? {
|
|
1362
|
+
domain: domainSteps.domain,
|
|
1363
|
+
step: domainSteps.step
|
|
1364
|
+
} : {});
|
|
1365
|
+
if (nextFilter.gpu) {
|
|
1366
|
+
nextFilter = assignGpuChannel(setFilterGpuMode(nextFilter, filters), filters);
|
|
1367
|
+
}
|
|
1368
|
+
return _objectSpread(_objectSpread({}, nextFilter), {}, {
|
|
1369
|
+
value: adjustValueToFilterDomain(previousValue, nextFilter)
|
|
1370
|
+
});
|
|
1371
|
+
}
|
|
1292
1372
|
var newFilter = filter;
|
|
1293
|
-
if (
|
|
1373
|
+
if (currentDataId) {
|
|
1294
1374
|
// if dataId already exist
|
|
1295
1375
|
newFilter = _removeFilterDataIdAtValueIndex(filter, valueIndex, datasets);
|
|
1296
1376
|
}
|
|
@@ -1312,8 +1392,8 @@ function _removeFilterDataIdAtValueIndex(filter, valueIndex, datasets) {
|
|
|
1312
1392
|
if (dataId) {
|
|
1313
1393
|
filter = removeFilterPlot(filter, dataId);
|
|
1314
1394
|
}
|
|
1315
|
-
for (var
|
|
1316
|
-
var prop =
|
|
1395
|
+
for (var _i2 = 0, _arr2 = ['dataId', 'name', 'fieldIdx', 'gpuChannel', 'endName', 'endFieldIdx', 'endMappedValue', 'gpuEndChannel']; _i2 < _arr2.length; _i2++) {
|
|
1396
|
+
var prop = _arr2[_i2];
|
|
1317
1397
|
if (Array.isArray(filter[prop])) {
|
|
1318
1398
|
var nextVal = filter[prop].slice();
|
|
1319
1399
|
nextVal.splice(valueIndex, 1);
|
|
@@ -1345,7 +1425,7 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1345
1425
|
case FILTER_UPDATER_PROPS.dataId:
|
|
1346
1426
|
{
|
|
1347
1427
|
var oldDataId = _toConsumableArray(filter.dataId);
|
|
1348
|
-
filter = _updateFilterDataIdAtValueIndex(filter, valueIndex, value, state.datasets);
|
|
1428
|
+
filter = _updateFilterDataIdAtValueIndex(filter, valueIndex, value, state.datasets, state.filters);
|
|
1349
1429
|
datasetIdsToFilter = uniq([].concat(_toConsumableArray(oldDataId), _toConsumableArray(filter.dataId)));
|
|
1350
1430
|
break;
|
|
1351
1431
|
}
|
|
@@ -1377,9 +1457,9 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1377
1457
|
case FILTER_UPDATER_PROPS.endName:
|
|
1378
1458
|
{
|
|
1379
1459
|
var _datasetId = filter.dataId[valueIndex];
|
|
1380
|
-
var
|
|
1381
|
-
_updatedFilter =
|
|
1382
|
-
_newDataset =
|
|
1460
|
+
var _applyTimeFilterEndFi3 = applyTimeFilterEndFieldName(filter, state.datasets, _datasetId, value, valueIndex),
|
|
1461
|
+
_updatedFilter = _applyTimeFilterEndFi3.filter,
|
|
1462
|
+
_newDataset = _applyTimeFilterEndFi3.dataset;
|
|
1383
1463
|
if (_updatedFilter) {
|
|
1384
1464
|
filter = _updatedFilter;
|
|
1385
1465
|
filter = setFilterGpuMode(filter, state.filters);
|
|
@@ -1464,21 +1544,23 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1464
1544
|
* @memberof visStateUpdaters
|
|
1465
1545
|
* @public
|
|
1466
1546
|
*/
|
|
1467
|
-
export var setFilterPlotUpdater = function setFilterPlotUpdater(state,
|
|
1468
|
-
var
|
|
1469
|
-
|
|
1547
|
+
export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref7) {
|
|
1548
|
+
var _newFilter$plotType, _newFilter$plotType3;
|
|
1549
|
+
var idx = _ref7.idx,
|
|
1550
|
+
newProp = _ref7.newProp;
|
|
1470
1551
|
if (!state.filters[idx]) {
|
|
1471
1552
|
Console.error("filters[".concat(idx, "] is undefined"));
|
|
1472
1553
|
return state;
|
|
1473
1554
|
}
|
|
1474
1555
|
var newFilter = state.filters[idx];
|
|
1556
|
+
var previousNumericInterval = (_newFilter$plotType = newFilter.plotType) === null || _newFilter$plotType === void 0 ? void 0 : _newFilter$plotType.numericInterval;
|
|
1475
1557
|
for (var prop in newProp) {
|
|
1476
1558
|
if (prop === 'plotType') {
|
|
1477
1559
|
var plotTypeUpdate = newProp.plotType;
|
|
1478
1560
|
if (plotTypeUpdate && Object.prototype.hasOwnProperty.call(plotTypeUpdate, 'groupBy')) {
|
|
1479
|
-
var _newFilter$
|
|
1561
|
+
var _newFilter$plotType2;
|
|
1480
1562
|
plotTypeUpdate = _objectSpread(_objectSpread({}, plotTypeUpdate), {}, {
|
|
1481
|
-
groupBy: mergePlotGroupBy((_newFilter$
|
|
1563
|
+
groupBy: mergePlotGroupBy((_newFilter$plotType2 = newFilter.plotType) === null || _newFilter$plotType2 === void 0 ? void 0 : _newFilter$plotType2.groupBy, plotTypeUpdate.groupBy)
|
|
1482
1564
|
});
|
|
1483
1565
|
}
|
|
1484
1566
|
newFilter = pick_('plotType')(merge_(plotTypeUpdate))(newFilter);
|
|
@@ -1489,12 +1571,30 @@ export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref6) {
|
|
|
1489
1571
|
}))(merge_(newProp)(newFilter));
|
|
1490
1572
|
}
|
|
1491
1573
|
}
|
|
1574
|
+
var numericIntervalChanged = newFilter.type === FILTER_TYPES.range && ((_newFilter$plotType3 = newFilter.plotType) === null || _newFilter$plotType3 === void 0 ? void 0 : _newFilter$plotType3.numericInterval) !== previousNumericInterval;
|
|
1575
|
+
if (numericIntervalChanged) {
|
|
1576
|
+
newFilter = _objectSpread(_objectSpread({}, newFilter), {}, {
|
|
1577
|
+
bins: undefined,
|
|
1578
|
+
lineChart: undefined
|
|
1579
|
+
});
|
|
1580
|
+
}
|
|
1492
1581
|
newFilter = updateFilterPlot(state.datasets, newFilter, undefined, state.layers);
|
|
1493
|
-
|
|
1582
|
+
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1494
1583
|
filters: state.filters.map(function (f, i) {
|
|
1495
1584
|
return i === idx ? newFilter : f;
|
|
1496
1585
|
})
|
|
1497
1586
|
});
|
|
1587
|
+
if (numericIntervalChanged && newFilter.type === FILTER_TYPES.range && newFilter.animationWindow === ANIMATION_WINDOW.interval) {
|
|
1588
|
+
var adjusted = adjustValueToAnimationWindow(newState, newFilter, getPlotBaseIndexByDataId(newState.datasets, newFilter, newState.layers));
|
|
1589
|
+
if (Array.isArray(adjusted.value) && adjusted.value.every(Number.isFinite)) {
|
|
1590
|
+
return setFilterUpdater(newState, {
|
|
1591
|
+
idx: idx,
|
|
1592
|
+
prop: 'value',
|
|
1593
|
+
value: adjusted.value
|
|
1594
|
+
});
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1597
|
+
return newState;
|
|
1498
1598
|
};
|
|
1499
1599
|
|
|
1500
1600
|
/**
|
|
@@ -1584,10 +1684,10 @@ export var createOrUpdateFilterUpdater = function createOrUpdateFilterUpdater(st
|
|
|
1584
1684
|
* Set layer color palette ui state
|
|
1585
1685
|
* @memberof visStateUpdaters
|
|
1586
1686
|
*/
|
|
1587
|
-
export var layerColorUIChangeUpdater = function layerColorUIChangeUpdater(state,
|
|
1588
|
-
var oldLayer =
|
|
1589
|
-
prop =
|
|
1590
|
-
newConfig =
|
|
1687
|
+
export var layerColorUIChangeUpdater = function layerColorUIChangeUpdater(state, _ref8) {
|
|
1688
|
+
var oldLayer = _ref8.oldLayer,
|
|
1689
|
+
prop = _ref8.prop,
|
|
1690
|
+
newConfig = _ref8.newConfig;
|
|
1591
1691
|
var oldVixConfig = oldLayer.config.visConfig[prop];
|
|
1592
1692
|
var newLayer = oldLayer.updateLayerColorUI(prop, newConfig);
|
|
1593
1693
|
var newVisConfig = newLayer.config.visConfig[prop];
|
|
@@ -1687,8 +1787,8 @@ export var updateFilterAnimationSpeedUpdater = function updateFilterAnimationSpe
|
|
|
1687
1787
|
* @public
|
|
1688
1788
|
*
|
|
1689
1789
|
*/
|
|
1690
|
-
export var updateLayerAnimationSpeedUpdater = function updateLayerAnimationSpeedUpdater(state,
|
|
1691
|
-
var speed =
|
|
1790
|
+
export var updateLayerAnimationSpeedUpdater = function updateLayerAnimationSpeedUpdater(state, _ref9) {
|
|
1791
|
+
var speed = _ref9.speed;
|
|
1692
1792
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
1693
1793
|
animationConfig: _objectSpread(_objectSpread({}, state.animationConfig), {}, {
|
|
1694
1794
|
speed: speed
|
|
@@ -1705,14 +1805,20 @@ export var setFilterViewUpdater = function setFilterViewUpdater(state, action) {
|
|
|
1705
1805
|
var view = action.view,
|
|
1706
1806
|
idx = action.idx;
|
|
1707
1807
|
var shouldResetOtherFiltersView = view === FILTER_VIEW_TYPES.enlarged;
|
|
1808
|
+
var filters = state.filters.map(function (f, i) {
|
|
1809
|
+
return i === idx ? _objectSpread(_objectSpread({}, f), {}, {
|
|
1810
|
+
view: view
|
|
1811
|
+
}) : shouldResetOtherFiltersView ? _objectSpread(_objectSpread({}, f), {}, {
|
|
1812
|
+
view: FILTER_VIEW_TYPES.side
|
|
1813
|
+
}) : f;
|
|
1814
|
+
});
|
|
1815
|
+
var openedFilter = filters[idx];
|
|
1816
|
+
if (view === FILTER_VIEW_TYPES.enlarged && (openedFilter === null || openedFilter === void 0 ? void 0 : openedFilter.type) === FILTER_TYPES.range) {
|
|
1817
|
+
var invalidatedFilter = toArray(openedFilter.dataId).reduce(removeFilterPlot, openedFilter);
|
|
1818
|
+
filters[idx] = updateFilterPlot(state.datasets, invalidatedFilter, undefined, state.layers);
|
|
1819
|
+
}
|
|
1708
1820
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
1709
|
-
filters:
|
|
1710
|
-
return i === idx ? _objectSpread(_objectSpread({}, f), {}, {
|
|
1711
|
-
view: view
|
|
1712
|
-
}) : shouldResetOtherFiltersView ? _objectSpread(_objectSpread({}, f), {}, {
|
|
1713
|
-
view: FILTER_VIEW_TYPES.side
|
|
1714
|
-
}) : f;
|
|
1715
|
-
})
|
|
1821
|
+
filters: filters
|
|
1716
1822
|
});
|
|
1717
1823
|
};
|
|
1718
1824
|
|
|
@@ -1806,8 +1912,8 @@ export var addLayerUpdater = function addLayerUpdater(state, action) {
|
|
|
1806
1912
|
* @memberof visStateUpdaters
|
|
1807
1913
|
* @public
|
|
1808
1914
|
*/
|
|
1809
|
-
export function removeLayerUpdater(state,
|
|
1810
|
-
var id =
|
|
1915
|
+
export function removeLayerUpdater(state, _ref0) {
|
|
1916
|
+
var id = _ref0.id;
|
|
1811
1917
|
var idx = Number.isFinite(id) ?
|
|
1812
1918
|
// support older API, remove layer by idx
|
|
1813
1919
|
Number(id) : state.layers.findIndex(function (l) {
|
|
@@ -1845,8 +1951,8 @@ export function removeLayerUpdater(state, _ref9) {
|
|
|
1845
1951
|
* @memberof visStateUpdaters
|
|
1846
1952
|
* @public
|
|
1847
1953
|
*/
|
|
1848
|
-
export var reorderLayerUpdater = function reorderLayerUpdater(state,
|
|
1849
|
-
var order =
|
|
1954
|
+
export var reorderLayerUpdater = function reorderLayerUpdater(state, _ref1) {
|
|
1955
|
+
var order = _ref1.order;
|
|
1850
1956
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
1851
1957
|
layerOrder: order
|
|
1852
1958
|
});
|
|
@@ -2099,8 +2205,8 @@ export var swapLayerOrderEntriesUpdater = function swapLayerOrderEntriesUpdater(
|
|
|
2099
2205
|
* @memberof visStateUpdaters
|
|
2100
2206
|
* @public
|
|
2101
2207
|
*/
|
|
2102
|
-
export var duplicateLayerUpdater = function duplicateLayerUpdater(state,
|
|
2103
|
-
var id =
|
|
2208
|
+
export var duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref10) {
|
|
2209
|
+
var id = _ref10.id;
|
|
2104
2210
|
var idx = Number.isFinite(id) ?
|
|
2105
2211
|
// support older API, remove layer by idx
|
|
2106
2212
|
Number(id) : state.layers.findIndex(function (l) {
|
|
@@ -2211,8 +2317,8 @@ export var addEffectUpdater = function addEffectUpdater(state, action) {
|
|
|
2211
2317
|
* @memberof visStateUpdaters
|
|
2212
2318
|
* @public
|
|
2213
2319
|
*/
|
|
2214
|
-
export var removeEffectUpdater = function removeEffectUpdater(state,
|
|
2215
|
-
var id =
|
|
2320
|
+
export var removeEffectUpdater = function removeEffectUpdater(state, _ref11) {
|
|
2321
|
+
var id = _ref11.id;
|
|
2216
2322
|
var idx = state.effects.findIndex(function (l) {
|
|
2217
2323
|
return l.id === id;
|
|
2218
2324
|
});
|
|
@@ -2237,8 +2343,8 @@ export var removeEffectUpdater = function removeEffectUpdater(state, _ref10) {
|
|
|
2237
2343
|
* @memberof visStateUpdaters
|
|
2238
2344
|
* @public
|
|
2239
2345
|
*/
|
|
2240
|
-
export var reorderEffectUpdater = function reorderEffectUpdater(state,
|
|
2241
|
-
var order =
|
|
2346
|
+
export var reorderEffectUpdater = function reorderEffectUpdater(state, _ref12) {
|
|
2347
|
+
var order = _ref12.order;
|
|
2242
2348
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2243
2349
|
effectOrder: fixEffectOrder(state.effects, _toConsumableArray(order))
|
|
2244
2350
|
});
|
|
@@ -2249,9 +2355,9 @@ export var reorderEffectUpdater = function reorderEffectUpdater(state, _ref11) {
|
|
|
2249
2355
|
* @memberof visStateUpdaters
|
|
2250
2356
|
* @public
|
|
2251
2357
|
*/
|
|
2252
|
-
export var updateEffectUpdater = function updateEffectUpdater(state,
|
|
2253
|
-
var id =
|
|
2254
|
-
props =
|
|
2358
|
+
export var updateEffectUpdater = function updateEffectUpdater(state, _ref13) {
|
|
2359
|
+
var id = _ref13.id,
|
|
2360
|
+
props = _ref13.props;
|
|
2255
2361
|
var idx = state.effects.findIndex(function (l) {
|
|
2256
2362
|
return l.id === id;
|
|
2257
2363
|
});
|
|
@@ -2354,9 +2460,9 @@ function removeChartsAndFilters(state, shouldRemove) {
|
|
|
2354
2460
|
* @memberof visStateUpdaters
|
|
2355
2461
|
* @public
|
|
2356
2462
|
*/
|
|
2357
|
-
export var addChartUpdater = function addChartUpdater(state,
|
|
2463
|
+
export var addChartUpdater = function addChartUpdater(state, _ref14) {
|
|
2358
2464
|
var _chart$display$isConf, _chart$display;
|
|
2359
|
-
var chart =
|
|
2465
|
+
var chart = _ref14.chart;
|
|
2360
2466
|
if (!(chart !== null && chart !== void 0 && chart.id)) {
|
|
2361
2467
|
return state;
|
|
2362
2468
|
}
|
|
@@ -2386,10 +2492,10 @@ export var addChartUpdater = function addChartUpdater(state, _ref13) {
|
|
|
2386
2492
|
* @memberof visStateUpdaters
|
|
2387
2493
|
* @public
|
|
2388
2494
|
*/
|
|
2389
|
-
export var updateChartUpdater = function updateChartUpdater(state,
|
|
2495
|
+
export var updateChartUpdater = function updateChartUpdater(state, _ref15) {
|
|
2390
2496
|
var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
|
|
2391
|
-
var id =
|
|
2392
|
-
props =
|
|
2497
|
+
var id = _ref15.id,
|
|
2498
|
+
props = _ref15.props;
|
|
2393
2499
|
var idx = (state.charts || []).findIndex(function (chart) {
|
|
2394
2500
|
return chart.id === id;
|
|
2395
2501
|
});
|
|
@@ -2436,8 +2542,8 @@ export var updateChartUpdater = function updateChartUpdater(state, _ref14) {
|
|
|
2436
2542
|
* @memberof visStateUpdaters
|
|
2437
2543
|
* @public
|
|
2438
2544
|
*/
|
|
2439
|
-
export var removeChartUpdater = function removeChartUpdater(state,
|
|
2440
|
-
var id =
|
|
2545
|
+
export var removeChartUpdater = function removeChartUpdater(state, _ref16) {
|
|
2546
|
+
var id = _ref16.id;
|
|
2441
2547
|
return removeChartsAndFilters(state, function (chart) {
|
|
2442
2548
|
return chart.id === id;
|
|
2443
2549
|
});
|
|
@@ -2446,20 +2552,23 @@ export var removeChartUpdater = function removeChartUpdater(state, _ref15) {
|
|
|
2446
2552
|
// ANNOTATION UPDATERS
|
|
2447
2553
|
|
|
2448
2554
|
function makeNewAnnotation(config) {
|
|
2449
|
-
var _config$kind,
|
|
2555
|
+
var _config$kind, _ref17, _config$textSide, _ref18, _config$textVerticalP, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength, _armLength2, _armLength3, _radiusInMeters;
|
|
2450
2556
|
var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : INITIAL_ANNOTATION_KIND;
|
|
2451
2557
|
var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
|
|
2452
2558
|
var derivedFromAngle = providedAngle != null ? textPlacementFromAngle(providedAngle) : undefined;
|
|
2453
|
-
var textSide = (
|
|
2454
|
-
var textVerticalPosition = (
|
|
2455
|
-
var base = _objectSpread(_objectSpread(_objectSpread({
|
|
2559
|
+
var textSide = (_ref17 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref17 !== void 0 ? _ref17 : kind === AnnotationKind.TEXT || kind === AnnotationKind.RULER ? undefined : INITIAL_ANNOTATION_TEXT_SIDE;
|
|
2560
|
+
var textVerticalPosition = (_ref18 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref18 !== void 0 ? _ref18 : kind === AnnotationKind.TEXT || kind === AnnotationKind.RULER ? undefined : INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
|
|
2561
|
+
var base = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
2456
2562
|
id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : generateHashId(6),
|
|
2457
2563
|
kind: kind,
|
|
2458
2564
|
isVisible: (_config$isVisible = config === null || config === void 0 ? void 0 : config.isVisible) !== null && _config$isVisible !== void 0 ? _config$isVisible : true,
|
|
2459
2565
|
autoSize: (_config$autoSize = config === null || config === void 0 ? void 0 : config.autoSize) !== null && _config$autoSize !== void 0 ? _config$autoSize : true,
|
|
2460
2566
|
autoSizeY: (_config$autoSizeY = config === null || config === void 0 ? void 0 : config.autoSizeY) !== null && _config$autoSizeY !== void 0 ? _config$autoSizeY : true,
|
|
2461
2567
|
anchorPoint: (_config$anchorPoint = config === null || config === void 0 ? void 0 : config.anchorPoint) !== null && _config$anchorPoint !== void 0 ? _config$anchorPoint : [0, 0],
|
|
2462
|
-
label: (_config$label = config === null || config === void 0 ? void 0 : config.label) !== null && _config$label !== void 0 ? _config$label : 'New Annotation'
|
|
2568
|
+
label: (_config$label = config === null || config === void 0 ? void 0 : config.label) !== null && _config$label !== void 0 ? _config$label : 'New Annotation'
|
|
2569
|
+
}, config !== null && config !== void 0 && config.editorState ? {
|
|
2570
|
+
editorState: config.editorState
|
|
2571
|
+
} : {}), {}, {
|
|
2463
2572
|
lineColor: (_config$lineColor = config === null || config === void 0 ? void 0 : config.lineColor) !== null && _config$lineColor !== void 0 ? _config$lineColor : INITIAL_ANNOTATION_LINE_COLOR,
|
|
2464
2573
|
lineWidth: (_config$lineWidth = config === null || config === void 0 ? void 0 : config.lineWidth) !== null && _config$lineWidth !== void 0 ? _config$lineWidth : INITIAL_ANNOTATION_LINE_WIDTH,
|
|
2465
2574
|
textWidth: (_config$textWidth = config === null || config === void 0 ? void 0 : config.textWidth) !== null && _config$textWidth !== void 0 ? _config$textWidth : INITIAL_ANNOTATION_TEXT_WIDTH,
|
|
@@ -2493,6 +2602,20 @@ function makeNewAnnotation(config) {
|
|
|
2493
2602
|
angle: providedAngle !== null && providedAngle !== void 0 ? providedAngle : defaultAngle,
|
|
2494
2603
|
radiusInMeters: (_radiusInMeters = config === null || config === void 0 ? void 0 : config.radiusInMeters) !== null && _radiusInMeters !== void 0 ? _radiusInMeters : 1000
|
|
2495
2604
|
});
|
|
2605
|
+
case AnnotationKind.RULER:
|
|
2606
|
+
{
|
|
2607
|
+
var _endPoint, _showCustomText, _showDistance;
|
|
2608
|
+
var anchorPoint = base.anchorPoint;
|
|
2609
|
+
var shifted = addMetersToLngLat(anchorPoint, [INITIAL_ANNOTATION_RULER_LENGTH_METERS, 0, 0]);
|
|
2610
|
+
var altitude = anchorPoint[2];
|
|
2611
|
+
var defaultEndPoint = altitude !== undefined && Number.isFinite(altitude) ? [shifted[0], shifted[1], altitude] : [shifted[0], shifted[1]];
|
|
2612
|
+
return _objectSpread(_objectSpread({}, base), {}, {
|
|
2613
|
+
kind: AnnotationKind.RULER,
|
|
2614
|
+
endPoint: (_endPoint = config === null || config === void 0 ? void 0 : config.endPoint) !== null && _endPoint !== void 0 ? _endPoint : defaultEndPoint,
|
|
2615
|
+
showCustomText: (_showCustomText = config === null || config === void 0 ? void 0 : config.showCustomText) !== null && _showCustomText !== void 0 ? _showCustomText : true,
|
|
2616
|
+
showDistance: (_showDistance = config === null || config === void 0 ? void 0 : config.showDistance) !== null && _showDistance !== void 0 ? _showDistance : true
|
|
2617
|
+
});
|
|
2618
|
+
}
|
|
2496
2619
|
case AnnotationKind.TEXT:
|
|
2497
2620
|
default:
|
|
2498
2621
|
return _objectSpread(_objectSpread({}, base), {}, {
|
|
@@ -2520,8 +2643,8 @@ export var addAnnotationUpdater = function addAnnotationUpdater(state, action) {
|
|
|
2520
2643
|
* @memberof visStateUpdaters
|
|
2521
2644
|
* @public
|
|
2522
2645
|
*/
|
|
2523
|
-
export var removeAnnotationUpdater = function removeAnnotationUpdater(state,
|
|
2524
|
-
var id =
|
|
2646
|
+
export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref19) {
|
|
2647
|
+
var id = _ref19.id;
|
|
2525
2648
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2526
2649
|
annotations: state.annotations.filter(function (a) {
|
|
2527
2650
|
return a.id !== id;
|
|
@@ -2537,9 +2660,9 @@ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _re
|
|
|
2537
2660
|
* @memberof visStateUpdaters
|
|
2538
2661
|
* @public
|
|
2539
2662
|
*/
|
|
2540
|
-
export var updateAnnotationUpdater = function updateAnnotationUpdater(state,
|
|
2541
|
-
var id =
|
|
2542
|
-
config =
|
|
2663
|
+
export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref20) {
|
|
2664
|
+
var id = _ref20.id,
|
|
2665
|
+
config = _ref20.config;
|
|
2543
2666
|
var idx = state.annotations.findIndex(function (a) {
|
|
2544
2667
|
return a.id === id;
|
|
2545
2668
|
});
|
|
@@ -2566,8 +2689,8 @@ export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _re
|
|
|
2566
2689
|
* @memberof visStateUpdaters
|
|
2567
2690
|
* @public
|
|
2568
2691
|
*/
|
|
2569
|
-
export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state,
|
|
2570
|
-
var id =
|
|
2692
|
+
export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref21) {
|
|
2693
|
+
var id = _ref21.id;
|
|
2571
2694
|
var original = state.annotations.find(function (a) {
|
|
2572
2695
|
return a.id === id;
|
|
2573
2696
|
});
|
|
@@ -2591,9 +2714,9 @@ export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(stat
|
|
|
2591
2714
|
* @memberof visStateUpdaters
|
|
2592
2715
|
* @public
|
|
2593
2716
|
*/
|
|
2594
|
-
export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state,
|
|
2595
|
-
var id =
|
|
2596
|
-
isEditingText =
|
|
2717
|
+
export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref22) {
|
|
2718
|
+
var id = _ref22.id,
|
|
2719
|
+
isEditingText = _ref22.isEditingText;
|
|
2597
2720
|
if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
|
|
2598
2721
|
return state;
|
|
2599
2722
|
}
|
|
@@ -2674,8 +2797,8 @@ function removeSingleDatasetUpdater(state, datasetKey) {
|
|
|
2674
2797
|
return false;
|
|
2675
2798
|
});
|
|
2676
2799
|
}
|
|
2677
|
-
function removeDatasetFromInteractionConfig(state,
|
|
2678
|
-
var dataId =
|
|
2800
|
+
function removeDatasetFromInteractionConfig(state, _ref23) {
|
|
2801
|
+
var dataId = _ref23.dataId;
|
|
2679
2802
|
var interactionConfig = state.interactionConfig;
|
|
2680
2803
|
var _interactionConfig = interactionConfig,
|
|
2681
2804
|
tooltip = _interactionConfig.tooltip;
|
|
@@ -2754,25 +2877,38 @@ export var resetMapConfigUpdater = function resetMapConfigUpdater(state) {
|
|
|
2754
2877
|
initialState: state.initialState
|
|
2755
2878
|
});
|
|
2756
2879
|
};
|
|
2880
|
+
export var setCameraBookmarksUpdater = function setCameraBookmarksUpdater(state, action) {
|
|
2881
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2882
|
+
cameraBookmarks: normalizeCameraBookmarks(action.payload)
|
|
2883
|
+
});
|
|
2884
|
+
};
|
|
2885
|
+
export var setCameraTourUpdater = function setCameraTourUpdater(state, action) {
|
|
2886
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2887
|
+
cameraTour: normalizeCameraTour(action.payload)
|
|
2888
|
+
});
|
|
2889
|
+
};
|
|
2757
2890
|
|
|
2758
2891
|
/**
|
|
2759
2892
|
* Propagate `visState` reducer with a new configuration. Current config will be override.
|
|
2760
2893
|
* @memberof visStateUpdaters
|
|
2761
2894
|
* @public
|
|
2762
2895
|
*/
|
|
2763
|
-
export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state,
|
|
2764
|
-
var
|
|
2765
|
-
|
|
2766
|
-
config =
|
|
2767
|
-
|
|
2768
|
-
options =
|
|
2896
|
+
export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref24) {
|
|
2897
|
+
var _ref24$payload = _ref24.payload,
|
|
2898
|
+
_ref24$payload$config = _ref24$payload.config,
|
|
2899
|
+
config = _ref24$payload$config === void 0 ? {} : _ref24$payload$config,
|
|
2900
|
+
_ref24$payload$option = _ref24$payload.options,
|
|
2901
|
+
options = _ref24$payload$option === void 0 ? {} : _ref24$payload$option;
|
|
2769
2902
|
if (!config.visState) {
|
|
2770
2903
|
return state;
|
|
2771
2904
|
}
|
|
2772
2905
|
var keepExistingConfig = options.keepExistingConfig;
|
|
2773
2906
|
|
|
2774
2907
|
// reset config if keepExistingConfig is falsy
|
|
2775
|
-
var mergedState = !keepExistingConfig ? resetMapConfigUpdater(state)
|
|
2908
|
+
var mergedState = !keepExistingConfig ? _objectSpread(_objectSpread({}, resetMapConfigUpdater(state)), {}, {
|
|
2909
|
+
cameraBookmarks: [],
|
|
2910
|
+
cameraTour: null
|
|
2911
|
+
}) : state;
|
|
2776
2912
|
var _iterator3 = _createForOfIteratorHelper(state.mergers),
|
|
2777
2913
|
_step3;
|
|
2778
2914
|
try {
|
|
@@ -2884,8 +3020,8 @@ export var mapClickUpdater = function mapClickUpdater(state, action) {
|
|
|
2884
3020
|
* @memberof visStateUpdaters
|
|
2885
3021
|
* @public
|
|
2886
3022
|
*/
|
|
2887
|
-
export var mouseMoveUpdater = function mouseMoveUpdater(state,
|
|
2888
|
-
var evt =
|
|
3023
|
+
export var mouseMoveUpdater = function mouseMoveUpdater(state, _ref25) {
|
|
3024
|
+
var evt = _ref25.evt;
|
|
2889
3025
|
if (Object.values(state.interactionConfig).some(function (config) {
|
|
2890
3026
|
return config.enabled;
|
|
2891
3027
|
})) {
|
|
@@ -2919,9 +3055,9 @@ export var toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action)
|
|
|
2919
3055
|
* @memberof visStateUpdaters
|
|
2920
3056
|
* @public
|
|
2921
3057
|
*/
|
|
2922
|
-
export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state,
|
|
2923
|
-
var mapIndex =
|
|
2924
|
-
layerId =
|
|
3058
|
+
export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref26) {
|
|
3059
|
+
var mapIndex = _ref26.mapIndex,
|
|
3060
|
+
layerId = _ref26.layerId;
|
|
2925
3061
|
var splitMaps = state.splitMaps;
|
|
2926
3062
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2927
3063
|
splitMaps: splitMaps.map(function (sm, i) {
|
|
@@ -2943,13 +3079,13 @@ function hydrateExternallyHostedProtoDataset(_x) {
|
|
|
2943
3079
|
return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
|
|
2944
3080
|
}
|
|
2945
3081
|
function _hydrateExternallyHostedProtoDataset() {
|
|
2946
|
-
_hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(
|
|
3082
|
+
_hydrateExternallyHostedProtoDataset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref27) {
|
|
2947
3083
|
var _dataset$metadata7, _dataset$metadata8;
|
|
2948
3084
|
var dataset, onProgress, loaded, _dataset$metadata9;
|
|
2949
3085
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
2950
3086
|
while (1) switch (_context2.prev = _context2.next) {
|
|
2951
3087
|
case 0:
|
|
2952
|
-
dataset =
|
|
3088
|
+
dataset = _ref27.arg, onProgress = _ref27.onProgress;
|
|
2953
3089
|
if (needsExternallyHostedHydrate(dataset)) {
|
|
2954
3090
|
_context2.next = 3;
|
|
2955
3091
|
break;
|
|
@@ -2994,7 +3130,7 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2994
3130
|
}
|
|
2995
3131
|
var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
|
|
2996
3132
|
var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
|
|
2997
|
-
var
|
|
3133
|
+
var _ref28 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(message) {
|
|
2998
3134
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
2999
3135
|
while (1) switch (_context.prev = _context.next) {
|
|
3000
3136
|
case 0:
|
|
@@ -3006,7 +3142,7 @@ var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
|
|
|
3006
3142
|
}, _callee);
|
|
3007
3143
|
}));
|
|
3008
3144
|
return function (_x2) {
|
|
3009
|
-
return
|
|
3145
|
+
return _ref28.apply(this, arguments);
|
|
3010
3146
|
};
|
|
3011
3147
|
}(), 'FAIL_CREATE_DATASET_TASK');
|
|
3012
3148
|
function getDatasetProgressId(dataset) {
|
|
@@ -3071,12 +3207,12 @@ function refreshExternallyHostedTable(_x3) {
|
|
|
3071
3207
|
return _refreshExternallyHostedTable.apply(this, arguments);
|
|
3072
3208
|
}
|
|
3073
3209
|
function _refreshExternallyHostedTable() {
|
|
3074
|
-
_refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(
|
|
3210
|
+
_refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref29) {
|
|
3075
3211
|
var metadata, onProgress;
|
|
3076
3212
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
3077
3213
|
while (1) switch (_context3.prev = _context3.next) {
|
|
3078
3214
|
case 0:
|
|
3079
|
-
metadata =
|
|
3215
|
+
metadata = _ref29.arg, onProgress = _ref29.onProgress;
|
|
3080
3216
|
return _context3.abrupt("return", loadExternallyHostedDataset(_objectSpread(_objectSpread({}, metadata), {}, {
|
|
3081
3217
|
onProgress: onProgress,
|
|
3082
3218
|
bypassCache: true
|
|
@@ -3097,9 +3233,9 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(refres
|
|
|
3097
3233
|
* @memberof visStateUpdaters
|
|
3098
3234
|
* @public
|
|
3099
3235
|
*/
|
|
3100
|
-
export function refreshDatasetUpdater(state,
|
|
3236
|
+
export function refreshDatasetUpdater(state, _ref30) {
|
|
3101
3237
|
var _dataset$metadata3, _dataset$metadata4;
|
|
3102
|
-
var dataId =
|
|
3238
|
+
var dataId = _ref30.dataId;
|
|
3103
3239
|
var dataset = state.datasets[dataId];
|
|
3104
3240
|
if (!dataset || dataset.type !== DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.source) !== 'string') {
|
|
3105
3241
|
return state;
|
|
@@ -3118,6 +3254,9 @@ export function refreshDatasetUpdater(state, _ref29) {
|
|
|
3118
3254
|
arg: {
|
|
3119
3255
|
source: nextDataset.metadata.source,
|
|
3120
3256
|
format: getRemoteSourceFormat(nextDataset.metadata),
|
|
3257
|
+
csvHeader: nextDataset.fields.map(function (field) {
|
|
3258
|
+
return field.name;
|
|
3259
|
+
}),
|
|
3121
3260
|
size: typeof nextDataset.metadata.size === 'number' ? nextDataset.metadata.size : undefined,
|
|
3122
3261
|
etag: typeof nextDataset.metadata.etag === 'string' ? nextDataset.metadata.etag : undefined,
|
|
3123
3262
|
lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
|
|
@@ -3138,10 +3277,10 @@ export function refreshDatasetUpdater(state, _ref29) {
|
|
|
3138
3277
|
* @memberof visStateUpdaters
|
|
3139
3278
|
* @public
|
|
3140
3279
|
*/
|
|
3141
|
-
export function refreshDatasetProgressUpdater(state,
|
|
3280
|
+
export function refreshDatasetProgressUpdater(state, _ref31) {
|
|
3142
3281
|
var _dataset$metadata5, _dataset$metadata6;
|
|
3143
|
-
var dataId =
|
|
3144
|
-
percent =
|
|
3282
|
+
var dataId = _ref31.dataId,
|
|
3283
|
+
percent = _ref31.percent;
|
|
3145
3284
|
var dataset = state.datasets[dataId];
|
|
3146
3285
|
if (!dataset || ((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshStatus) !== 'loading') {
|
|
3147
3286
|
return state;
|
|
@@ -3231,10 +3370,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
|
|
|
3231
3370
|
* @memberof visStateUpdaters
|
|
3232
3371
|
* @public
|
|
3233
3372
|
*/
|
|
3234
|
-
export function refreshDatasetSuccessUpdater(state,
|
|
3373
|
+
export function refreshDatasetSuccessUpdater(state, _ref32) {
|
|
3235
3374
|
var _result$data;
|
|
3236
|
-
var dataId =
|
|
3237
|
-
result =
|
|
3375
|
+
var dataId = _ref32.dataId,
|
|
3376
|
+
result = _ref32.result;
|
|
3238
3377
|
var dataset = state.datasets[dataId];
|
|
3239
3378
|
if (!dataset) {
|
|
3240
3379
|
return state;
|
|
@@ -3271,11 +3410,41 @@ export function refreshDatasetSuccessUpdater(state, _ref31) {
|
|
|
3271
3410
|
if (!schemaUnchanged) {
|
|
3272
3411
|
return rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets);
|
|
3273
3412
|
}
|
|
3274
|
-
|
|
3275
|
-
|
|
3413
|
+
|
|
3414
|
+
// Rebuild domains from all datasets in a synced filter, keeping its selection
|
|
3415
|
+
// and settings. Revalidating a saved filter would reset its GPU mode.
|
|
3416
|
+
var filters = state.filters.map(function (filter) {
|
|
3417
|
+
if (!filter.dataId.includes(dataId) || filter.type === FILTER_TYPES.polygon) {
|
|
3418
|
+
return filter;
|
|
3419
|
+
}
|
|
3420
|
+
var domainSteps = mergeFilterDomain(filter, datasets);
|
|
3421
|
+
return domainSteps ? _objectSpread(_objectSpread({}, filter), {}, {
|
|
3422
|
+
domain: domainSteps.domain,
|
|
3423
|
+
step: domainSteps.step
|
|
3424
|
+
}) : filter;
|
|
3425
|
+
});
|
|
3426
|
+
var nextState = reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
|
|
3427
|
+
datasets: datasets,
|
|
3428
|
+
filters: filters
|
|
3276
3429
|
}), dataId);
|
|
3430
|
+
return _objectSpread(_objectSpread({}, nextState), {}, {
|
|
3431
|
+
filters: nextState.filters.map(function (filter) {
|
|
3432
|
+
return filter.dataId.includes(dataId) ? updateFilterPlot(nextState.datasets, filter.dataId.reduce(removeFilterPlot, filter), undefined, nextState.layers) : filter;
|
|
3433
|
+
})
|
|
3434
|
+
});
|
|
3277
3435
|
}
|
|
3278
3436
|
function reapplyFiltersAndLayerData(state, dataId) {
|
|
3437
|
+
// Polygon filters read cached geometry. Refresh it before filtering so a
|
|
3438
|
+
// moved feature is tested at its new position, including same-length updates.
|
|
3439
|
+
var needsGeometry = state.layers.some(function (layer) {
|
|
3440
|
+
return layer.config.dataId === dataId && polygonFilterDependsOnLayerMeta(layer) && state.filters.some(function (filter) {
|
|
3441
|
+
var _filter$layerId;
|
|
3442
|
+
return filter.type === FILTER_TYPES.polygon && filter.enabled !== false && ((_filter$layerId = filter.layerId) === null || _filter$layerId === void 0 ? void 0 : _filter$layerId.includes(layer.id));
|
|
3443
|
+
});
|
|
3444
|
+
});
|
|
3445
|
+
if (needsGeometry) {
|
|
3446
|
+
state = updateAllLayerDomainData(state, [dataId], undefined);
|
|
3447
|
+
}
|
|
3279
3448
|
var filteredDatasets = applyFiltersToDatasets([dataId], state.datasets, state.filters, state.layers);
|
|
3280
3449
|
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3281
3450
|
datasets: filteredDatasets
|
|
@@ -3323,15 +3492,15 @@ function normalizeDatasetRows(rows, fields) {
|
|
|
3323
3492
|
}
|
|
3324
3493
|
|
|
3325
3494
|
/**
|
|
3326
|
-
* Append or upsert rows on an existing in-memory row dataset. Keeps layers and re-runs filters.
|
|
3327
|
-
*
|
|
3495
|
+
* Append or upsert rows on an existing in-memory row or Arrow dataset. Keeps layers and re-runs filters.
|
|
3496
|
+
* DuckDB tables warn and are left unchanged (INSERT not implemented). Nested, binary, and geoarrow Arrow columns are rejected.
|
|
3328
3497
|
* @memberof visStateUpdaters
|
|
3329
3498
|
* @public
|
|
3330
3499
|
*/
|
|
3331
|
-
export function addToDatasetUpdater(state,
|
|
3332
|
-
var dataId =
|
|
3333
|
-
rows =
|
|
3334
|
-
options =
|
|
3500
|
+
export function addToDatasetUpdater(state, _ref33) {
|
|
3501
|
+
var dataId = _ref33.dataId,
|
|
3502
|
+
rows = _ref33.rows,
|
|
3503
|
+
options = _ref33.options;
|
|
3335
3504
|
var dataset = state.datasets[dataId];
|
|
3336
3505
|
if (!dataset) {
|
|
3337
3506
|
return state;
|
|
@@ -3351,15 +3520,15 @@ export function addToDatasetUpdater(state, _ref32) {
|
|
|
3351
3520
|
}
|
|
3352
3521
|
|
|
3353
3522
|
/**
|
|
3354
|
-
* Delete rows by index or by field values from an existing in-memory row dataset.
|
|
3355
|
-
* Keeps layers.
|
|
3523
|
+
* Delete rows by index or by field values from an existing in-memory row or Arrow dataset.
|
|
3524
|
+
* Keeps layers. DuckDB tables warn and are left unchanged.
|
|
3356
3525
|
* @memberof visStateUpdaters
|
|
3357
3526
|
* @public
|
|
3358
3527
|
*/
|
|
3359
|
-
export function removeFromDatasetUpdater(state,
|
|
3360
|
-
var dataId =
|
|
3361
|
-
rowIndexes =
|
|
3362
|
-
byField =
|
|
3528
|
+
export function removeFromDatasetUpdater(state, _ref34) {
|
|
3529
|
+
var dataId = _ref34.dataId,
|
|
3530
|
+
rowIndexes = _ref34.rowIndexes,
|
|
3531
|
+
byField = _ref34.byField;
|
|
3363
3532
|
var dataset = state.datasets[dataId];
|
|
3364
3533
|
if (!dataset) {
|
|
3365
3534
|
return state;
|
|
@@ -3382,9 +3551,9 @@ export function removeFromDatasetUpdater(state, _ref33) {
|
|
|
3382
3551
|
* @memberof visStateUpdaters
|
|
3383
3552
|
* @public
|
|
3384
3553
|
*/
|
|
3385
|
-
export function refreshDatasetErrorUpdater(state,
|
|
3386
|
-
var dataId =
|
|
3387
|
-
error =
|
|
3554
|
+
export function refreshDatasetErrorUpdater(state, _ref35) {
|
|
3555
|
+
var dataId = _ref35.dataId,
|
|
3556
|
+
error = _ref35.error;
|
|
3388
3557
|
var dataset = state.datasets[dataId];
|
|
3389
3558
|
if (!dataset) {
|
|
3390
3559
|
return state;
|
|
@@ -3404,6 +3573,7 @@ export function refreshDatasetErrorUpdater(state, _ref34) {
|
|
|
3404
3573
|
* @memberof visStateUpdaters
|
|
3405
3574
|
* @public
|
|
3406
3575
|
*/
|
|
3576
|
+
|
|
3407
3577
|
// eslint-disable-next-line complexity
|
|
3408
3578
|
export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
3409
3579
|
// datasets can be a single data entries or an array of multiple data entries
|
|
@@ -3426,10 +3596,10 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
|
3426
3596
|
var remoteTasks = [];
|
|
3427
3597
|
var notificationTasks = [];
|
|
3428
3598
|
var hydrateProgress = {};
|
|
3429
|
-
datasets.forEach(function (
|
|
3430
|
-
var
|
|
3431
|
-
info =
|
|
3432
|
-
rest = _objectWithoutProperties(
|
|
3599
|
+
datasets.forEach(function (_ref36, datasetIndex) {
|
|
3600
|
+
var _ref36$info = _ref36.info,
|
|
3601
|
+
info = _ref36$info === void 0 ? {} : _ref36$info,
|
|
3602
|
+
rest = _objectWithoutProperties(_ref36, _excluded2);
|
|
3433
3603
|
var proto = _objectSpread({
|
|
3434
3604
|
info: info
|
|
3435
3605
|
}, rest);
|
|
@@ -3477,21 +3647,26 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
|
|
|
3477
3647
|
});
|
|
3478
3648
|
}
|
|
3479
3649
|
}
|
|
3480
|
-
return withTask(updatedState, [].concat(_toConsumableArray(batches.map(function (batch) {
|
|
3650
|
+
return withTask(updatedState, [].concat(_toConsumableArray(batches.map(function (batch, batchIndex) {
|
|
3481
3651
|
return Task.allSettled(batch.tasks).map(function (results) {
|
|
3482
|
-
|
|
3652
|
+
var onFinish = action.onFinish;
|
|
3653
|
+
var payload = _objectSpread({
|
|
3483
3654
|
results: results,
|
|
3484
3655
|
addToMapOptions: options,
|
|
3485
3656
|
progressIds: batch.progressIds
|
|
3486
|
-
}
|
|
3657
|
+
}, onFinish && batchIndex === batches.length - 1 ? {
|
|
3658
|
+
onFinish: onFinish
|
|
3659
|
+
} : {});
|
|
3660
|
+
return createNewDatasetSuccess(payload);
|
|
3487
3661
|
});
|
|
3488
3662
|
})), notificationTasks));
|
|
3489
3663
|
};
|
|
3490
3664
|
export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
|
|
3491
|
-
var
|
|
3492
|
-
results =
|
|
3493
|
-
addToMapOptions =
|
|
3494
|
-
progressIds =
|
|
3665
|
+
var _ref37 = action.payload,
|
|
3666
|
+
results = _ref37.results,
|
|
3667
|
+
addToMapOptions = _ref37.addToMapOptions,
|
|
3668
|
+
progressIds = _ref37.progressIds,
|
|
3669
|
+
onFinish = _ref37.onFinish;
|
|
3495
3670
|
var notificationTasks = [];
|
|
3496
3671
|
var newDataEntries = results.reduce(function (accu, result, idx) {
|
|
3497
3672
|
if (result.status === 'fulfilled') {
|
|
@@ -3532,7 +3707,9 @@ export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpda
|
|
|
3532
3707
|
});
|
|
3533
3708
|
return withTask(clearLoadingProgress(setLoadingIndicatorUpdater(updatedState, payload_({
|
|
3534
3709
|
change: -1
|
|
3535
|
-
})), progressIds), notificationTasks)
|
|
3710
|
+
})), progressIds), [].concat(notificationTasks, _toConsumableArray(onFinish ? [DELAY_TASK(10).map(function () {
|
|
3711
|
+
return onFinish;
|
|
3712
|
+
})] : [])));
|
|
3536
3713
|
};
|
|
3537
3714
|
|
|
3538
3715
|
/**
|
|
@@ -3770,10 +3947,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3770
3947
|
// follow renamed columns
|
|
3771
3948
|
var columnsPatch = {};
|
|
3772
3949
|
var columnsChanged = false;
|
|
3773
|
-
Object.entries(layer.config.columns || {}).forEach(function (
|
|
3774
|
-
var
|
|
3775
|
-
ckey =
|
|
3776
|
-
col =
|
|
3950
|
+
Object.entries(layer.config.columns || {}).forEach(function (_ref38) {
|
|
3951
|
+
var _ref39 = _slicedToArray(_ref38, 2),
|
|
3952
|
+
ckey = _ref39[0],
|
|
3953
|
+
col = _ref39[1];
|
|
3777
3954
|
if (col !== null && col !== void 0 && col.value && renames[col.value]) {
|
|
3778
3955
|
columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
|
|
3779
3956
|
value: renames[col.value]
|
|
@@ -3786,8 +3963,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3786
3963
|
}
|
|
3787
3964
|
|
|
3788
3965
|
// follow renamed visual-channel fields (colorField, sizeField, ...)
|
|
3789
|
-
Object.values(layer.visualChannels).forEach(function (
|
|
3790
|
-
var field =
|
|
3966
|
+
Object.values(layer.visualChannels).forEach(function (_ref40) {
|
|
3967
|
+
var field = _ref40.field;
|
|
3791
3968
|
var fieldConfig = layer.config[field];
|
|
3792
3969
|
if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
|
|
3793
3970
|
configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
|
|
@@ -3823,15 +4000,15 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3823
4000
|
}
|
|
3824
4001
|
var FILTER_PLOT_Y_AXIS_TYPES = new Set([ALL_FIELD_TYPES.integer, ALL_FIELD_TYPES.real]);
|
|
3825
4002
|
function clearTimelineFilterState(filter) {
|
|
3826
|
-
var
|
|
3827
|
-
_syncedWithLayerTimeline =
|
|
3828
|
-
_syncTimelineMode =
|
|
3829
|
-
_timeBins =
|
|
3830
|
-
_lineChart =
|
|
3831
|
-
_timezone =
|
|
3832
|
-
_invertTrendColor =
|
|
3833
|
-
_showTimeDisplay =
|
|
3834
|
-
rest = _objectWithoutProperties(
|
|
4003
|
+
var _ref41 = filter,
|
|
4004
|
+
_syncedWithLayerTimeline = _ref41.syncedWithLayerTimeline,
|
|
4005
|
+
_syncTimelineMode = _ref41.syncTimelineMode,
|
|
4006
|
+
_timeBins = _ref41.timeBins,
|
|
4007
|
+
_lineChart = _ref41.lineChart,
|
|
4008
|
+
_timezone = _ref41.timezone,
|
|
4009
|
+
_invertTrendColor = _ref41.invertTrendColor,
|
|
4010
|
+
_showTimeDisplay = _ref41.showTimeDisplay,
|
|
4011
|
+
rest = _objectWithoutProperties(_ref41, _excluded3);
|
|
3835
4012
|
return _objectSpread(_objectSpread({}, rest), {}, {
|
|
3836
4013
|
fixedDomain: false,
|
|
3837
4014
|
isAnimating: false,
|
|
@@ -3843,7 +4020,7 @@ function clearTimelineFilterState(filter) {
|
|
|
3843
4020
|
});
|
|
3844
4021
|
}
|
|
3845
4022
|
function reconcileTimelinePlotAfterPrimaryRemoval(filter, datasets) {
|
|
3846
|
-
var _filter$yAxis, _primaryDataset$field, _filter$
|
|
4023
|
+
var _filter$yAxis, _primaryDataset$field, _filter$plotType2;
|
|
3847
4024
|
if (filter.type !== FILTER_TYPES.timeRange) {
|
|
3848
4025
|
return filter;
|
|
3849
4026
|
}
|
|
@@ -3852,7 +4029,7 @@ function reconcileTimelinePlotAfterPrimaryRemoval(filter, datasets) {
|
|
|
3852
4029
|
var _filter$yAxis2;
|
|
3853
4030
|
return field.name === ((_filter$yAxis2 = filter.yAxis) === null || _filter$yAxis2 === void 0 ? void 0 : _filter$yAxis2.name) && FILTER_PLOT_Y_AXIS_TYPES.has(field.type);
|
|
3854
4031
|
})) !== null && _primaryDataset$field !== void 0 ? _primaryDataset$field : null : null;
|
|
3855
|
-
var groupByFieldName = (_filter$
|
|
4032
|
+
var groupByFieldName = (_filter$plotType2 = filter.plotType) === null || _filter$plotType2 === void 0 || (_filter$plotType2 = _filter$plotType2.groupBy) === null || _filter$plotType2 === void 0 ? void 0 : _filter$plotType2.fieldName;
|
|
3856
4033
|
var hasGroupByField = groupByFieldName ? primaryDataset === null || primaryDataset === void 0 ? void 0 : primaryDataset.fields.some(function (field) {
|
|
3857
4034
|
return field.name === groupByFieldName;
|
|
3858
4035
|
}) : true;
|
|
@@ -3899,10 +4076,10 @@ export function updateDatasetUpdater(state, action) {
|
|
|
3899
4076
|
|
|
3900
4077
|
// 1. rebuild the table schema in place (same id/label/color/metadata)
|
|
3901
4078
|
var newTable = copyTableAndUpdate(existing, {});
|
|
3902
|
-
var
|
|
3903
|
-
|
|
3904
|
-
sortedColumn =
|
|
3905
|
-
sortMode =
|
|
4079
|
+
var _ref42 = Object.entries(existing.sortColumn || {})[0] || [],
|
|
4080
|
+
_ref43 = _slicedToArray(_ref42, 2),
|
|
4081
|
+
sortedColumn = _ref43[0],
|
|
4082
|
+
sortMode = _ref43[1];
|
|
3906
4083
|
newTable.updateSchema(data);
|
|
3907
4084
|
newTable.dataRevision = existing.dataRevision + 1;
|
|
3908
4085
|
|
|
@@ -3974,9 +4151,9 @@ export function updateDatasetUpdater(state, action) {
|
|
|
3974
4151
|
var leavingTimeFilter = filter.type === FILTER_TYPES.timeRange && updated.type !== FILTER_TYPES.timeRange;
|
|
3975
4152
|
var oldEndName = toArray(filter.endName)[vi];
|
|
3976
4153
|
if (updated.type === FILTER_TYPES.timeRange && oldEndName) {
|
|
3977
|
-
var _renames$oldEndName,
|
|
4154
|
+
var _renames$oldEndName, _ref44, _applyTimeFilterEndFi4;
|
|
3978
4155
|
var endName = (_renames$oldEndName = renames[oldEndName]) !== null && _renames$oldEndName !== void 0 ? _renames$oldEndName : oldEndName;
|
|
3979
|
-
updated = (
|
|
4156
|
+
updated = (_ref44 = (_applyTimeFilterEndFi4 = applyTimeFilterEndFieldName(updated, newDatasets, dataId, endName, vi).filter) !== null && _applyTimeFilterEndFi4 !== void 0 ? _applyTimeFilterEndFi4 : applyTimeFilterEndFieldName(updated, newDatasets, dataId, null, vi).filter) !== null && _ref44 !== void 0 ? _ref44 : updated;
|
|
3980
4157
|
}
|
|
3981
4158
|
|
|
3982
4159
|
// Time plots only accept numeric y-axis fields. Re-resolve the complete
|
|
@@ -4040,8 +4217,8 @@ export function updateDatasetUpdater(state, action) {
|
|
|
4040
4217
|
var removedLayerIds = new Set(layersToRemove);
|
|
4041
4218
|
if (removedLayerIds.size) {
|
|
4042
4219
|
newFilters = newFilters.flatMap(function (filter) {
|
|
4043
|
-
var _filter$
|
|
4044
|
-
if (filter.type !== FILTER_TYPES.polygon || !((_filter$
|
|
4220
|
+
var _filter$layerId2;
|
|
4221
|
+
if (filter.type !== FILTER_TYPES.polygon || !((_filter$layerId2 = filter.layerId) !== null && _filter$layerId2 !== void 0 && _filter$layerId2.some(function (id) {
|
|
4045
4222
|
return removedLayerIds.has(id);
|
|
4046
4223
|
}))) {
|
|
4047
4224
|
return [filter];
|
|
@@ -4264,9 +4441,9 @@ export var loadFilesUpdater = function loadFilesUpdater(state, action) {
|
|
|
4264
4441
|
|
|
4265
4442
|
// A deferred load is another batch for the same Add Data click. Keep files
|
|
4266
4443
|
// already staged, and keep their error cards, instead of starting over.
|
|
4267
|
-
var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (
|
|
4268
|
-
var
|
|
4269
|
-
value =
|
|
4444
|
+
var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (_ref45) {
|
|
4445
|
+
var _ref46 = _slicedToArray(_ref45, 2),
|
|
4446
|
+
value = _ref46[1];
|
|
4270
4447
|
return value === null || value === void 0 ? void 0 : value.error;
|
|
4271
4448
|
})) : {};
|
|
4272
4449
|
var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
|
|
@@ -4294,9 +4471,9 @@ export var loadFilesUpdater = function loadFilesUpdater(state, action) {
|
|
|
4294
4471
|
* Add a drop to the deferred load that is already parsing.
|
|
4295
4472
|
* The current file keeps its cache; the new files run after it.
|
|
4296
4473
|
*/
|
|
4297
|
-
function appendDeferredFileLoad(state,
|
|
4298
|
-
var filesToLoad =
|
|
4299
|
-
companionFiles =
|
|
4474
|
+
function appendDeferredFileLoad(state, _ref47) {
|
|
4475
|
+
var filesToLoad = _ref47.filesToLoad,
|
|
4476
|
+
companionFiles = _ref47.companionFiles;
|
|
4300
4477
|
var loading = state.fileLoading;
|
|
4301
4478
|
if (!loading || !filesToLoad.length && !companionFiles.length) {
|
|
4302
4479
|
return state;
|
|
@@ -4508,7 +4685,9 @@ export function makeLoadFileTask(file, fileCache) {
|
|
|
4508
4685
|
fileName: displayName,
|
|
4509
4686
|
onFinish: function onFinish(result) {
|
|
4510
4687
|
return processFileContent({
|
|
4511
|
-
content: result,
|
|
4688
|
+
content: _objectSpread(_objectSpread({}, result), addDataOptions !== null && addDataOptions !== void 0 && addDataOptions.deferAddToMap && getApplicationConfig().useArrowProgressiveLoading ? {
|
|
4689
|
+
prepareProgressiveReplay: true
|
|
4690
|
+
} : {}),
|
|
4512
4691
|
fileCache: fileCache
|
|
4513
4692
|
});
|
|
4514
4693
|
}
|
|
@@ -4528,9 +4707,9 @@ export function makeLoadFileTask(file, fileCache) {
|
|
|
4528
4707
|
* @public
|
|
4529
4708
|
*/
|
|
4530
4709
|
export function processFileContentUpdater(state, action) {
|
|
4531
|
-
var _action$
|
|
4532
|
-
content = _action$
|
|
4533
|
-
fileCache = _action$
|
|
4710
|
+
var _action$payload = action.payload,
|
|
4711
|
+
content = _action$payload.content,
|
|
4712
|
+
fileCache = _action$payload.fileCache;
|
|
4534
4713
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
4535
4714
|
fileName: content.fileName,
|
|
4536
4715
|
progress: {
|
|
@@ -4570,15 +4749,15 @@ export function parseProgress() {
|
|
|
4570
4749
|
* @memberof visStateUpdaters
|
|
4571
4750
|
* @public
|
|
4572
4751
|
*/
|
|
4573
|
-
export var nextFileBatchUpdater = function nextFileBatchUpdater(state,
|
|
4752
|
+
export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref48) {
|
|
4574
4753
|
var _accumulated$data;
|
|
4575
|
-
var
|
|
4576
|
-
gen =
|
|
4577
|
-
fileName =
|
|
4578
|
-
progress =
|
|
4579
|
-
accumulated =
|
|
4580
|
-
onFinish =
|
|
4581
|
-
options =
|
|
4754
|
+
var _ref48$payload = _ref48.payload,
|
|
4755
|
+
gen = _ref48$payload.gen,
|
|
4756
|
+
fileName = _ref48$payload.fileName,
|
|
4757
|
+
progress = _ref48$payload.progress,
|
|
4758
|
+
accumulated = _ref48$payload.accumulated,
|
|
4759
|
+
onFinish = _ref48$payload.onFinish,
|
|
4760
|
+
options = _ref48$payload.options;
|
|
4582
4761
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
4583
4762
|
fileName: fileName,
|
|
4584
4763
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
@@ -4596,9 +4775,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref46) {
|
|
|
4596
4775
|
return options ? loadFilesSuccess(result, options) : loadFilesSuccess(result);
|
|
4597
4776
|
}, function (err) {
|
|
4598
4777
|
return loadFilesErr(fileName, err);
|
|
4599
|
-
})] : []), [UNWRAP_TASK(gen.next()).bimap(function (
|
|
4600
|
-
var value =
|
|
4601
|
-
done =
|
|
4778
|
+
})] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref49) {
|
|
4779
|
+
var value = _ref49.value,
|
|
4780
|
+
done = _ref49.done;
|
|
4602
4781
|
return done ? onFinish(accumulated) : nextFileBatch(_objectSpread({
|
|
4603
4782
|
gen: gen,
|
|
4604
4783
|
fileName: fileName,
|
|
@@ -4630,10 +4809,10 @@ export var clearStagedLoadedFilesUpdater = function clearStagedLoadedFilesUpdate
|
|
|
4630
4809
|
stagedToAdd: null
|
|
4631
4810
|
});
|
|
4632
4811
|
};
|
|
4633
|
-
export var loadFilesErrUpdater = function loadFilesErrUpdater(state,
|
|
4634
|
-
var error =
|
|
4635
|
-
fileName =
|
|
4636
|
-
errorLoadId =
|
|
4812
|
+
export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref50) {
|
|
4813
|
+
var error = _ref50.error,
|
|
4814
|
+
fileName = _ref50.fileName,
|
|
4815
|
+
errorLoadId = _ref50.loadId;
|
|
4637
4816
|
if (!state.fileLoading || errorLoadId != null && state.fileLoading.loadId !== errorLoadId) {
|
|
4638
4817
|
return state;
|
|
4639
4818
|
}
|
|
@@ -4658,8 +4837,8 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref48) {
|
|
|
4658
4837
|
* @memberof visStateUpdaters
|
|
4659
4838
|
* @public
|
|
4660
4839
|
*/
|
|
4661
|
-
export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state,
|
|
4662
|
-
var dataId =
|
|
4840
|
+
export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref51) {
|
|
4841
|
+
var dataId = _ref51.dataId;
|
|
4663
4842
|
// apply cpuFilter
|
|
4664
4843
|
var dataIds = toArray(dataId);
|
|
4665
4844
|
return dataIds.reduce(function (accu, id) {
|
|
@@ -4722,9 +4901,9 @@ export function initialFileLoadingProgress(file, index) {
|
|
|
4722
4901
|
error: null
|
|
4723
4902
|
});
|
|
4724
4903
|
}
|
|
4725
|
-
export function updateFileLoadingProgressUpdater(state,
|
|
4726
|
-
var fileName =
|
|
4727
|
-
progress =
|
|
4904
|
+
export function updateFileLoadingProgressUpdater(state, _ref53) {
|
|
4905
|
+
var fileName = _ref53.fileName,
|
|
4906
|
+
progress = _ref53.progress;
|
|
4728
4907
|
// @ts-expect-error
|
|
4729
4908
|
return pick_('fileLoadingProgress')(pick_(fileName)(merge_(progress)))(state);
|
|
4730
4909
|
}
|
|
@@ -4816,8 +4995,8 @@ export function updateAnimationDomain(state) {
|
|
|
4816
4995
|
* Update the status of the editor
|
|
4817
4996
|
* @memberof visStateUpdaters
|
|
4818
4997
|
*/
|
|
4819
|
-
export var setEditorModeUpdater = function setEditorModeUpdater(state,
|
|
4820
|
-
var mode =
|
|
4998
|
+
export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref54) {
|
|
4999
|
+
var mode = _ref54.mode;
|
|
4821
5000
|
var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
|
|
4822
5001
|
if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
|
|
4823
5002
|
return state;
|
|
@@ -4835,10 +5014,10 @@ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref52) {
|
|
|
4835
5014
|
* Update editor features
|
|
4836
5015
|
* @memberof visStateUpdaters
|
|
4837
5016
|
*/
|
|
4838
|
-
export function setFeaturesUpdater(state,
|
|
5017
|
+
export function setFeaturesUpdater(state, _ref55) {
|
|
4839
5018
|
var _lastFeature$properti, _lastFeature$properti2;
|
|
4840
|
-
var
|
|
4841
|
-
features =
|
|
5019
|
+
var _ref55$features = _ref55.features,
|
|
5020
|
+
features = _ref55$features === void 0 ? [] : _ref55$features;
|
|
4842
5021
|
var lastFeature = features.length && features[features.length - 1];
|
|
4843
5022
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4844
5023
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
@@ -4911,10 +5090,10 @@ function findEditorFeature(state, feature) {
|
|
|
4911
5090
|
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
4912
5091
|
* @memberof visStateUpdaters
|
|
4913
5092
|
*/
|
|
4914
|
-
export function setEditorFeaturePropertiesUpdater(state,
|
|
5093
|
+
export function setEditorFeaturePropertiesUpdater(state, _ref56) {
|
|
4915
5094
|
var _state$editor$selecte2;
|
|
4916
|
-
var feature =
|
|
4917
|
-
properties =
|
|
5095
|
+
var feature = _ref56.feature,
|
|
5096
|
+
properties = _ref56.properties;
|
|
4918
5097
|
if (!getApplicationConfig().enableDrawOnMapSketches) {
|
|
4919
5098
|
return state;
|
|
4920
5099
|
}
|
|
@@ -4953,9 +5132,9 @@ export function setEditorFeaturePropertiesUpdater(state, _ref54) {
|
|
|
4953
5132
|
* Set the current selected feature
|
|
4954
5133
|
* @memberof uiStateUpdaters
|
|
4955
5134
|
*/
|
|
4956
|
-
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
4957
|
-
var feature =
|
|
4958
|
-
selectionContext =
|
|
5135
|
+
export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref57) {
|
|
5136
|
+
var feature = _ref57.feature,
|
|
5137
|
+
selectionContext = _ref57.selectionContext;
|
|
4959
5138
|
// add bbox for polygon filter to speed up filtering
|
|
4960
5139
|
var selectedFeature = feature;
|
|
4961
5140
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -4977,8 +5156,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
|
4977
5156
|
* Delete existing feature from filters
|
|
4978
5157
|
* @memberof visStateUpdaters
|
|
4979
5158
|
*/
|
|
4980
|
-
export function deleteFeatureUpdater(state,
|
|
4981
|
-
var feature =
|
|
5159
|
+
export function deleteFeatureUpdater(state, _ref58) {
|
|
5160
|
+
var feature = _ref58.feature;
|
|
4982
5161
|
if (!feature) {
|
|
4983
5162
|
return state;
|
|
4984
5163
|
}
|
|
@@ -5043,8 +5222,8 @@ export function setPolygonFilterLayerUpdater(state, payload) {
|
|
|
5043
5222
|
});
|
|
5044
5223
|
}
|
|
5045
5224
|
var filter = state.filters[filterIdx];
|
|
5046
|
-
var _filter$
|
|
5047
|
-
layerId = _filter$
|
|
5225
|
+
var _filter$layerId3 = filter.layerId,
|
|
5226
|
+
layerId = _filter$layerId3 === void 0 ? [] : _filter$layerId3;
|
|
5048
5227
|
var isLayerIncluded = layerId.includes(layer.id);
|
|
5049
5228
|
newLayerId = isLayerIncluded ?
|
|
5050
5229
|
// if layer is included, remove it
|
|
@@ -5123,10 +5302,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
5123
5302
|
* @memberof visStateUpdaters
|
|
5124
5303
|
* @public
|
|
5125
5304
|
*/
|
|
5126
|
-
export function sortTableColumnUpdater(state,
|
|
5127
|
-
var dataId =
|
|
5128
|
-
column =
|
|
5129
|
-
mode =
|
|
5305
|
+
export function sortTableColumnUpdater(state, _ref59) {
|
|
5306
|
+
var dataId = _ref59.dataId,
|
|
5307
|
+
column = _ref59.column,
|
|
5308
|
+
mode = _ref59.mode;
|
|
5130
5309
|
var dataset = state.datasets[dataId];
|
|
5131
5310
|
if (!dataset) {
|
|
5132
5311
|
return state;
|
|
@@ -5147,9 +5326,9 @@ export function sortTableColumnUpdater(state, _ref57) {
|
|
|
5147
5326
|
* @memberof visStateUpdaters
|
|
5148
5327
|
* @public
|
|
5149
5328
|
*/
|
|
5150
|
-
export function pinTableColumnUpdater(state,
|
|
5151
|
-
var dataId =
|
|
5152
|
-
column =
|
|
5329
|
+
export function pinTableColumnUpdater(state, _ref60) {
|
|
5330
|
+
var dataId = _ref60.dataId,
|
|
5331
|
+
column = _ref60.column;
|
|
5153
5332
|
var dataset = state.datasets[dataId];
|
|
5154
5333
|
if (!dataset) {
|
|
5155
5334
|
return state;
|
|
@@ -5162,9 +5341,9 @@ export function pinTableColumnUpdater(state, _ref58) {
|
|
|
5162
5341
|
* @memberof visStateUpdaters
|
|
5163
5342
|
* @public
|
|
5164
5343
|
*/
|
|
5165
|
-
export function toggleTableColumnHiddenUpdater(state,
|
|
5166
|
-
var dataId =
|
|
5167
|
-
column =
|
|
5344
|
+
export function toggleTableColumnHiddenUpdater(state, _ref61) {
|
|
5345
|
+
var dataId = _ref61.dataId,
|
|
5346
|
+
column = _ref61.column;
|
|
5168
5347
|
var dataset = state.datasets[dataId];
|
|
5169
5348
|
if (!dataset) {
|
|
5170
5349
|
return state;
|
|
@@ -5176,8 +5355,8 @@ export function toggleTableColumnHiddenUpdater(state, _ref59) {
|
|
|
5176
5355
|
* @memberof visStateUpdaters
|
|
5177
5356
|
* @public
|
|
5178
5357
|
*/
|
|
5179
|
-
export function showAllTableColumnsUpdater(state,
|
|
5180
|
-
var dataId =
|
|
5358
|
+
export function showAllTableColumnsUpdater(state, _ref62) {
|
|
5359
|
+
var dataId = _ref62.dataId;
|
|
5181
5360
|
var dataset = state.datasets[dataId];
|
|
5182
5361
|
if (!dataset) {
|
|
5183
5362
|
return state;
|
|
@@ -5190,9 +5369,9 @@ export function showAllTableColumnsUpdater(state, _ref60) {
|
|
|
5190
5369
|
* @memberof visStateUpdaters
|
|
5191
5370
|
* @public
|
|
5192
5371
|
*/
|
|
5193
|
-
export function copyTableColumnUpdater(state,
|
|
5194
|
-
var dataId =
|
|
5195
|
-
column =
|
|
5372
|
+
export function copyTableColumnUpdater(state, _ref63) {
|
|
5373
|
+
var dataId = _ref63.dataId,
|
|
5374
|
+
column = _ref63.column;
|
|
5196
5375
|
var dataset = state.datasets[dataId];
|
|
5197
5376
|
if (!dataset) {
|
|
5198
5377
|
return state;
|
|
@@ -5216,9 +5395,9 @@ export function copyTableColumnUpdater(state, _ref61) {
|
|
|
5216
5395
|
* @memberof visStateUpdaters
|
|
5217
5396
|
* @public
|
|
5218
5397
|
*/
|
|
5219
|
-
export function setColumnDisplayFormatUpdater(state,
|
|
5220
|
-
var dataId =
|
|
5221
|
-
formats =
|
|
5398
|
+
export function setColumnDisplayFormatUpdater(state, _ref64) {
|
|
5399
|
+
var dataId = _ref64.dataId,
|
|
5400
|
+
formats = _ref64.formats;
|
|
5222
5401
|
var dataset = state.datasets[dataId];
|
|
5223
5402
|
if (!dataset) {
|
|
5224
5403
|
return state;
|
|
@@ -5310,12 +5489,12 @@ function requestDatasetColumnStatistics(_x4) {
|
|
|
5310
5489
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
5311
5490
|
}
|
|
5312
5491
|
function _requestDatasetColumnStatistics() {
|
|
5313
|
-
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(
|
|
5492
|
+
_requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref65) {
|
|
5314
5493
|
var dataset, field, filterProps, mappedValue, values, result;
|
|
5315
5494
|
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
5316
5495
|
while (1) switch (_context4.prev = _context4.next) {
|
|
5317
5496
|
case 0:
|
|
5318
|
-
dataset =
|
|
5497
|
+
dataset = _ref65.dataset, field = _ref65.field;
|
|
5319
5498
|
_context4.next = 3;
|
|
5320
5499
|
return yieldForPaint();
|
|
5321
5500
|
case 3:
|
|
@@ -5348,9 +5527,9 @@ var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'L
|
|
|
5348
5527
|
* @memberof visStateUpdaters
|
|
5349
5528
|
* @public
|
|
5350
5529
|
*/
|
|
5351
|
-
export function loadColumnStatsUpdater(state,
|
|
5352
|
-
var dataId =
|
|
5353
|
-
fieldName =
|
|
5530
|
+
export function loadColumnStatsUpdater(state, _ref66) {
|
|
5531
|
+
var dataId = _ref66.dataId,
|
|
5532
|
+
fieldName = _ref66.fieldName;
|
|
5354
5533
|
var fieldNamesToLoad = toArray(fieldName);
|
|
5355
5534
|
var dataset = state.datasets[dataId];
|
|
5356
5535
|
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
@@ -5371,9 +5550,9 @@ export function loadColumnStatsUpdater(state, _ref64) {
|
|
|
5371
5550
|
return LOAD_COLUMN_STATS_TASK({
|
|
5372
5551
|
dataset: newDataset,
|
|
5373
5552
|
field: f
|
|
5374
|
-
}).bimap(function (
|
|
5375
|
-
var result =
|
|
5376
|
-
filterProps =
|
|
5553
|
+
}).bimap(function (_ref67) {
|
|
5554
|
+
var result = _ref67.result,
|
|
5555
|
+
filterProps = _ref67.filterProps;
|
|
5377
5556
|
return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps, {
|
|
5378
5557
|
fieldType: f.type
|
|
5379
5558
|
});
|
|
@@ -5392,12 +5571,12 @@ export function loadColumnStatsUpdater(state, _ref64) {
|
|
|
5392
5571
|
* @memberof visStateUpdaters
|
|
5393
5572
|
* @public
|
|
5394
5573
|
*/
|
|
5395
|
-
export function loadColumnStatsSuccessUpdater(state,
|
|
5396
|
-
var result =
|
|
5397
|
-
filterProps =
|
|
5398
|
-
dataId =
|
|
5399
|
-
fieldName =
|
|
5400
|
-
fieldType =
|
|
5574
|
+
export function loadColumnStatsSuccessUpdater(state, _ref68) {
|
|
5575
|
+
var result = _ref68.result,
|
|
5576
|
+
filterProps = _ref68.filterProps,
|
|
5577
|
+
dataId = _ref68.dataId,
|
|
5578
|
+
fieldName = _ref68.fieldName,
|
|
5579
|
+
fieldType = _ref68.fieldType;
|
|
5401
5580
|
var dataset = state.datasets[dataId];
|
|
5402
5581
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
5403
5582
|
return f.name === fieldName;
|
|
@@ -5425,11 +5604,11 @@ export function loadColumnStatsSuccessUpdater(state, _ref66) {
|
|
|
5425
5604
|
* @memberof visStateUpdaters
|
|
5426
5605
|
* @public
|
|
5427
5606
|
*/
|
|
5428
|
-
export function loadColumnStatsErrorUpdater(state,
|
|
5429
|
-
var error =
|
|
5430
|
-
dataId =
|
|
5431
|
-
fieldName =
|
|
5432
|
-
fieldType =
|
|
5607
|
+
export function loadColumnStatsErrorUpdater(state, _ref69) {
|
|
5608
|
+
var error = _ref69.error,
|
|
5609
|
+
dataId = _ref69.dataId,
|
|
5610
|
+
fieldName = _ref69.fieldName,
|
|
5611
|
+
fieldType = _ref69.fieldType;
|
|
5433
5612
|
var dataset = state.datasets[dataId];
|
|
5434
5613
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
5435
5614
|
return f.name === fieldName;
|
|
@@ -5516,8 +5695,8 @@ _action) {
|
|
|
5516
5695
|
* Draw on Map polygon into a new dataset. Raster tiles download a PNG clip and a
|
|
5517
5696
|
* GeoJSON sidecar (bbox rectangle + stats) instead of creating a dataset.
|
|
5518
5697
|
*/
|
|
5519
|
-
export function extractDataFromFeatureUpdater(state,
|
|
5520
|
-
var layerId =
|
|
5698
|
+
export function extractDataFromFeatureUpdater(state, _ref70) {
|
|
5699
|
+
var layerId = _ref70.layerId;
|
|
5521
5700
|
var feature = state.editor.selectedFeature;
|
|
5522
5701
|
var layer = state.layers.find(function (l) {
|
|
5523
5702
|
return l.id === layerId;
|
|
@@ -5619,9 +5798,9 @@ export function extractDataFromFeatureUpdater(state, _ref68) {
|
|
|
5619
5798
|
}
|
|
5620
5799
|
});
|
|
5621
5800
|
}
|
|
5622
|
-
export function setFilterAnimationTimeConfigUpdater(state,
|
|
5623
|
-
var idx =
|
|
5624
|
-
config =
|
|
5801
|
+
export function setFilterAnimationTimeConfigUpdater(state, _ref71) {
|
|
5802
|
+
var idx = _ref71.idx,
|
|
5803
|
+
config = _ref71.config;
|
|
5625
5804
|
var oldFilter = state.filters[idx];
|
|
5626
5805
|
if (!oldFilter) {
|
|
5627
5806
|
Console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -5651,8 +5830,8 @@ function checkTimeConfigArgs(config) {
|
|
|
5651
5830
|
/**
|
|
5652
5831
|
* Update editor
|
|
5653
5832
|
*/
|
|
5654
|
-
export function setLayerAnimationTimeConfigUpdater(state,
|
|
5655
|
-
var config =
|
|
5833
|
+
export function setLayerAnimationTimeConfigUpdater(state, _ref72) {
|
|
5834
|
+
var config = _ref72.config;
|
|
5656
5835
|
if (!config) {
|
|
5657
5836
|
return state;
|
|
5658
5837
|
}
|
|
@@ -5850,8 +6029,8 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
5850
6029
|
* @returns nextState
|
|
5851
6030
|
* @public
|
|
5852
6031
|
*/
|
|
5853
|
-
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
5854
|
-
var change =
|
|
6032
|
+
export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref73) {
|
|
6033
|
+
var change = _ref73.payload.change;
|
|
5855
6034
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
5856
6035
|
if (!loadingIndicatorValue) {
|
|
5857
6036
|
loadingIndicatorValue = 0;
|
|
@@ -5870,11 +6049,11 @@ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(stat
|
|
|
5870
6049
|
* @memberof visStateUpdaters
|
|
5871
6050
|
* @public
|
|
5872
6051
|
*/
|
|
5873
|
-
export function setLoadingProgressUpdater(state,
|
|
6052
|
+
export function setLoadingProgressUpdater(state, _ref74) {
|
|
5874
6053
|
var _state$loadingProgres, _state$loadingProcess;
|
|
5875
|
-
var id =
|
|
5876
|
-
percent =
|
|
5877
|
-
phase =
|
|
6054
|
+
var id = _ref74.id,
|
|
6055
|
+
percent = _ref74.percent,
|
|
6056
|
+
phase = _ref74.phase;
|
|
5878
6057
|
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
5879
6058
|
return state;
|
|
5880
6059
|
}
|
|
@@ -6001,10 +6180,10 @@ function findChildDatasetIds(value) {
|
|
|
6001
6180
|
}
|
|
6002
6181
|
|
|
6003
6182
|
// moved unmerged layers, filters, interactions
|
|
6004
|
-
function moveValueToBeMerged(state, propValues,
|
|
6005
|
-
var prop =
|
|
6006
|
-
toMergeProp =
|
|
6007
|
-
saveUnmerged =
|
|
6183
|
+
function moveValueToBeMerged(state, propValues, _ref76) {
|
|
6184
|
+
var prop = _ref76.prop,
|
|
6185
|
+
toMergeProp = _ref76.toMergeProp,
|
|
6186
|
+
saveUnmerged = _ref76.saveUnmerged;
|
|
6008
6187
|
// remove prop value from state
|
|
6009
6188
|
// TODO: should we add remove updater to merger as well?
|
|
6010
6189
|
if (!propValues) {
|
|
@@ -6106,17 +6285,17 @@ export function preservedOrderWithParked() {
|
|
|
6106
6285
|
});
|
|
6107
6286
|
return [].concat(_toConsumableArray(ordered), _toConsumableArray(rest));
|
|
6108
6287
|
}
|
|
6109
|
-
export function replaceDatasetDepsInState(state,
|
|
6110
|
-
var dataId =
|
|
6111
|
-
dataIdToUse =
|
|
6288
|
+
export function replaceDatasetDepsInState(state, _ref77) {
|
|
6289
|
+
var dataId = _ref77.dataId,
|
|
6290
|
+
dataIdToUse = _ref77.dataIdToUse;
|
|
6112
6291
|
var serializedState = serializeVisState(state, state.schema);
|
|
6113
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
6114
|
-
var prop =
|
|
6115
|
-
toMergeProp =
|
|
6116
|
-
replaceParentDatasetIds =
|
|
6117
|
-
getChildDatasetIds =
|
|
6118
|
-
saveUnmerged =
|
|
6119
|
-
preserveOrder =
|
|
6292
|
+
var nextState = state.mergers.reduce(function (accuState, _ref78) {
|
|
6293
|
+
var prop = _ref78.prop,
|
|
6294
|
+
toMergeProp = _ref78.toMergeProp,
|
|
6295
|
+
replaceParentDatasetIds = _ref78.replaceParentDatasetIds,
|
|
6296
|
+
getChildDatasetIds = _ref78.getChildDatasetIds,
|
|
6297
|
+
saveUnmerged = _ref78.saveUnmerged,
|
|
6298
|
+
preserveOrder = _ref78.preserveOrder;
|
|
6120
6299
|
// get dataset ids that are depends on this dataset
|
|
6121
6300
|
var props = toArray(prop);
|
|
6122
6301
|
var toMergeProps = toArray(toMergeProp);
|
|
@@ -6126,7 +6305,8 @@ export function replaceDatasetDepsInState(state, _ref75) {
|
|
|
6126
6305
|
var replacedState = accuState;
|
|
6127
6306
|
savedProps.forEach(function (propValue, i) {
|
|
6128
6307
|
var _replacedState$merger, _replacedState$merger2;
|
|
6129
|
-
|
|
6308
|
+
// Camera snapshots never reference datasets, even when a dataset ID is "id".
|
|
6309
|
+
if (propValue == null || props[i] === 'cameraBookmarks') {
|
|
6130
6310
|
return;
|
|
6131
6311
|
}
|
|
6132
6312
|
var mergerOptions = {
|
|
@@ -6156,11 +6336,11 @@ export function replaceDatasetDepsInState(state, _ref75) {
|
|
|
6156
6336
|
}, state);
|
|
6157
6337
|
return nextState;
|
|
6158
6338
|
}
|
|
6159
|
-
function replacePropValueInState(state, replacedItem,
|
|
6160
|
-
var prop =
|
|
6161
|
-
toMergeProp =
|
|
6162
|
-
getChildDatasetIds =
|
|
6163
|
-
saveUnmerged =
|
|
6339
|
+
function replacePropValueInState(state, replacedItem, _ref79) {
|
|
6340
|
+
var prop = _ref79.prop,
|
|
6341
|
+
toMergeProp = _ref79.toMergeProp,
|
|
6342
|
+
getChildDatasetIds = _ref79.getChildDatasetIds,
|
|
6343
|
+
saveUnmerged = _ref79.saveUnmerged;
|
|
6164
6344
|
// prop is depends on the dataset to be replaced
|
|
6165
6345
|
// remove prop from state, and move it to toBeMerged
|
|
6166
6346
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -6231,4 +6411,4 @@ export function runSuitabilityUpdater(state, action) {
|
|
|
6231
6411
|
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
6232
6412
|
}
|
|
6233
6413
|
export { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, addSuitabilityUpdater, removeDatasetOpUpdater, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater, setSuitabilityConfigUpdater };
|
|
6234
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiRVhQQU5EX1pJUF9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJuZXh0RmlsZUJhdGNoIiwic2V0RmlsdGVyIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiZml0Qm91bmRzIiwiZml0TWFwQm91bmRzIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJhcHBseUZpbHRlckNvbmZpZyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwic25hcFRvTWFya3MiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJhcnJheUluc2VydCIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRpc2FibGVHcHVJZkludmVydGVkIiwiZmlsdGVyVHlwZVVzZXNHcHUiLCJnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQiLCJlcnJvck5vdGlmaWNhdGlvbiIsInN1Y2Nlc3NOb3RpZmljYXRpb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsInRvU2tldGNoRmVhdHVyZSIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmlsdGVyRGF0YXNldENQVSIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsImdldERlZmF1bHRGaWx0ZXIiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImlzSW5SYW5nZSIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzUmdiQ29sb3IiLCJwYXJzZUZpZWxkVmFsdWUiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJzZXQiLCJ1cGRhdGVGaWx0ZXJQbG90IiwicmVtb3ZlRmlsdGVyUGxvdCIsImlzTGF5ZXJBbmltYXRhYmxlIiwiaXNTaWRlRmlsdGVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImdlbmVyYXRlSGFzaElkIiwidG9BcnJheSIsImFycmF5TW92ZSIsIkFMTF9GSUVMRF9UWVBFUyIsIkFOSU1BVElPTl9XSU5ET1ciLCJCQVNFX1NQRUVEIiwiQ09NUEFSRV9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkVESVRPUl9NT0RFUyIsIkZJTFRFUl9UWVBFUyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiTEFZRVJfVFlQRVMiLCJGUFMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwiUExPVF9UWVBFUyIsIlNPUlRfT1JERVIiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiQ0hBTk5FTF9TQ0FMRVMiLCJTQ0FMRV9UWVBFUyIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJBbm5vdGF0aW9uS2luZCIsIkRhdGFzZXRUeXBlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwiR0VPQ09ERVJfSUNPTl9DT0xPUiIsIkdFT0NPREVSX0xBWUVSX0lEIiwiQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMiLCJpc1BvaW50Q291bnRMYWJlbCIsIkxBWUVSX0lEX0xFTkdUSCIsIkxheWVyIiwiTGF5ZXJDbGFzc2VzIiwiYXBwbHlfIiwiY29tcG9zZV8iLCJmaWx0ZXJPdXRCeUlkIiwiaWZfIiwibWVyZ2VfIiwicGF5bG9hZF8iLCJwaWNrXyIsInJlbW92ZUVsZW1lbnRBdEluZGV4Iiwic3dhcF8iLCJpc1ZhbGlkTWVyZ2VyIiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZVZpc1N0YXRlIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiS2VwbGVyR0xTY2hlbWEiLCJnZXRGaWxlc1RvUGFyc2UiLCJpc1ppcEZpbGVOYW1lIiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwicHJvY2Vzc0dlb2pzb24iLCJidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhIiwiZm9ybWF0Q29sdW1uVHlwZUNvbnZlcnNpb25FcnJvciIsImFzc2lnbkdwdUNoYW5uZWwiLCJidWlsZERlbGV0ZUNvbHVtbkRhdGEiLCJidWlsZFJlbmFtZUNvbHVtbkRhdGEiLCJjYW5NdXRhdGVEYXRhc2V0U2NoZW1hIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicGluVGFibGVDb2x1bW5zIiwic2hvd0FsbFRhYmxlQ29sdW1ucyIsInRvZ2dsZUhpZGRlblRhYmxlQ29sdW1uIiwic2V0RmlsdGVyR3B1TW9kZSIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJyZW1hcENoYXJ0c0ZvckRhdGFzZXQiLCJmaW5kRmllbGRzVG9TaG93IiwiZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQiLCJyZW1vdmVMYXllckZyb21ab29tT3BhY2l0eSIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsImdldE5ld0xheWVyR3JvdXAiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImFkZEdyb3VwQnlVcGRhdGVyIiwiYWRkSm9pblVwZGF0ZXIiLCJhZGRTcGF0aWFsSm9pblVwZGF0ZXIiLCJhZGRTdWl0YWJpbGl0eVVwZGF0ZXIiLCJleGVjdXRlR3JvdXBCeSIsImV4ZWN1dGVKb2luIiwiZXhlY3V0ZVNwYXRpYWxKb2luIiwiZXhlY3V0ZVN1aXRhYmlsaXR5IiwicmVtb3ZlRGF0YXNldE9wVXBkYXRlciIsInJlbW92ZU9wc0ZvckRhdGFzZXRzIiwic2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIiLCJzZXRKb2luQ29uZmlnVXBkYXRlciIsInNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlciIsInNldFN1aXRhYmlsaXR5Q29uZmlnVXBkYXRlciIsImZpeEVmZmVjdE9yZGVyIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwibWVyZ2VUaW1lRG9tYWlucyIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJtZXJnZVBsb3RHcm91cEJ5IiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsIm1lcmdlRmlsdGVyRG9tYWluIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJvcHRpb25hbE1hcFRleHQiLCJjcmVhdGVFZmZlY3QiLCJmaW5kTWFwQm91bmRzIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsInRpbWV6b25lIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkFCU09MVVRFIiwibGVnZW5kIiwiaGlkZUludmlzaWJsZUxheWVycyIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImNvbG9yIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsImFubm90YXRpb24iLCJ6b29tT3BhY2l0eSIsImNvbnRyb2xsZXJzIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwidW5kZWZpbmVkIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJncm91cEJ5cyIsImpvaW5zIiwic3VpdGFiaWxpdGllcyIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImNoYXJ0cyIsImNoYXJ0c1RvQmVNZXJnZWQiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJzdGFnZWRUb0FkZCIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdQcm9jZXNzaW5nIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsInNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJmcm9tQ2FsbGJhY2siLCJfIiwiY2IiLCJBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OIiwidXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhIiwic3RhdGUiLCJfcmVmIiwibGF5ZXIiLCJpZHgiLCJfb2JqZWN0U3ByZWFkIiwibWFwIiwibHlyIiwiaSIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJpc1Zpc2libGUiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsIm5leHQiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyIsImFwcGx5TGF5ZXJDb25maWdVcGRhdGVyIiwiYWN0aW9uIiwiX3NlcmlhbGl6ZUxheWVyIiwib2xkTGF5ZXJJZCIsIm5ld0xheWVyQ29uZmlnIiwibGF5ZXJJbmRleCIsInNhdmVkTGF5ZXJDb25maWciLCJuZXdQYXJzZWRMYXllciIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllcklkIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImVyciIsImUiLCJmIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwicHJvcHMiLCJuZXdDb25maWciLCJfYWN0aW9uJG5ld0NvbmZpZyIsInJlc3RDb25maWciLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJsYXllclNldElzVmFsaWRVcGRhdGVyIiwiaXNWYWxpZCIsImxheWVyVG9VcGRhdGUiLCJuZXdEYXRhIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTIiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJkZWZhdWx0VGV4dExhYmVsIiwiYXJndW1lbnRzIiwibmV3VGV4dExhYmVsIiwic2xpY2UiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsIm5hbWUiLCJmaWx0ZXIiLCJhZGRGaWVsZHMiLCJpbmRleCIsImluY2x1ZGVzIiwib3RoZXIiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyIsImVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXIiLCJib3VuZHMiLCJuZXdUeXBlIiwib2xkSWQiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaGFzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJfdG9Qcm9wZXJ0eUtleSIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YiLCJmb3VuZCIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwiY2hhbm5lbFNjYWxlVHlwZSIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImNoYW5uZWxLZXkiLCJqZW5rcyIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJwcmV2aW91c1dpbmRvdyIsIm5leHRGaWx0ZXIiLCJ0aW1lUmFuZ2UiLCJpbnRlcnZhbCIsImFkanVzdGVkIiwiZXZlcnkiLCJ2IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm5ld0ZpbHRlciIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwidXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyIsImFmZmVjdGVkRGF0YXNldElkcyIsInVwZGF0ZWRGaWx0ZXJJbmRleCIsInNoYXJlZERhdGFzZXRJZHMiLCJpbnZhbGlkYXRlZEZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsInN1cHBvcnRzSW52ZXJzaW9uIiwiX3N0YXRlJGRhdGFzZXRzJGRhdGFzIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJpbnZlcnRlZCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGVVcGRhdGUiLCJwbG90VHlwZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJncm91cEJ5IiwiY2hhcnRUeXBlIiwieUF4aXMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOCIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJzaG91bGRSZW1vdmUiLCJyZW1vdmVkIiwicmVtb3ZlZElkcyIsImZpbHRlcklkcyIsImZsYXRNYXAiLCJfY2hhcnQkY3Jvc3NGaWx0ZXIiLCJjcm9zc0ZpbHRlciIsInJlZHVjZVJpZ2h0IiwiYWRkQ2hhcnRVcGRhdGVyIiwiX3JlZjEzIiwiX2NoYXJ0JGRpc3BsYXkkaXNDb25mIiwiX2NoYXJ0JGRpc3BsYXkiLCJleGlzdGluZyIsImlzSnNvbkVkaXRvckFjdGl2ZSIsInVwZGF0ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNCIsIl9uZXh0JGNyb3NzRmlsdGVyMiIsIl9wcmV2JGNyb3NzRmlsdGVyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIyIiwiX25leHQkY3Jvc3NGaWx0ZXIzIiwiZGF0YUlkQ2hhbmdlZCIsImxheWVySWRDaGFuZ2VkIiwiX25leHQkY3Jvc3NGaWx0ZXIiLCJvd25lZEZpbHRlcklkcyIsInJlbW92ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNSIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjE2IiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxNyIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRTaWRlIiwiVEVYVCIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwiYSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJyZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlciIsIl9zdGF0ZSRkYXRhc2V0cyIsIl9kYXRhc2V0IiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwiZ2VvY29kZXJMYXllciIsIl9jb25maWckY29uZmlnJGNvbG9yIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyNyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwicGhhc2UiLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsImNsZWFyTG9hZGluZ1Byb2dyZXNzIiwiaWRzIiwiY3VycmVudCIsInByb2Nlc3NpbmciLCJuZXh0UHJvY2Vzc2luZyIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyOCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjI5IiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudDIiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjMwIiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwiX2RhdGFzZXQkbWV0YWRhdGE2IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzEiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjMzIiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjM0IiwiU3RyaW5nIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJyZWFkeVRhc2tzIiwicmVtb3RlVGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsImh5ZHJhdGVQcm9ncmVzcyIsIl9yZWYzNSIsImRhdGFzZXRJbmRleCIsIl9yZWYzNSRpbmZvIiwicmVzdCIsIl9leGNsdWRlZDIiLCJwcm90byIsInJlbW90ZSIsInByb2dyZXNzSWRzIiwiYmF0Y2hlcyIsInRhc2tzIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJjaGFuZ2UiLCJiYXRjaCIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiYWRkVG9NYXBPcHRpb25zIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsImxheWVyc05vdEluU3BsaXRNYXBzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNiIsIl9yZWYzNyIsImNrZXkiLCJjb2wiLCJfcmVmMzgiLCJmaWVsZENvbmZpZyIsIl90bCRmaWVsZCIsIl90bCRmaWVsZDIiLCJjYW5kaWRhdGUiLCJfcmVuYW1lcyRuYW1lIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwiRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTIiwiaW50ZWdlciIsInJlYWwiLCJjbGVhclRpbWVsaW5lRmlsdGVyU3RhdGUiLCJfcmVmMzkiLCJfc3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJfc3luY1RpbWVsaW5lTW9kZSIsInN5bmNUaW1lbGluZU1vZGUiLCJfdGltZUJpbnMiLCJ0aW1lQmlucyIsIl9saW5lQ2hhcnQiLCJfdGltZXpvbmUiLCJfaW52ZXJ0VHJlbmRDb2xvciIsImludmVydFRyZW5kQ29sb3IiLCJfc2hvd1RpbWVEaXNwbGF5Iiwic2hvd1RpbWVEaXNwbGF5IiwiX2V4Y2x1ZGVkMyIsImZpeGVkRG9tYWluIiwiZnJlZSIsInJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwiLCJfZmlsdGVyJHlBeGlzIiwiX3ByaW1hcnlEYXRhc2V0JGZpZWxkIiwiX2ZpbHRlciRwbG90VHlwZSIsInByaW1hcnlEYXRhc2V0IiwiX2ZpbHRlciR5QXhpczIiLCJncm91cEJ5RmllbGROYW1lIiwiZmllbGROYW1lIiwiaGFzR3JvdXBCeUZpZWxkIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfcmVuYW1lcyRzb3J0ZWRDb2x1bW4iLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwiX3JlZjQwIiwic29ydENvbHVtbiIsIl9yZWY0MSIsInNvcnRlZENvbHVtbiIsInNvcnRNb2RlIiwidXBkYXRlU2NoZW1hIiwiZGF0YVJldmlzaW9uIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydE9yZGVyIiwibmV3RmllbGRzQnlOYW1lIiwiTWFwIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUyIiwiaGlkZGVuQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUzIiwibmV4dFNvcnRlZENvbHVtbiIsImRhdGFzZXRJZHNUb1JlZmlsdGVyIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl9uZXdUYWJsZSRnZXRDb2x1bW5GaSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXh0RmlsdGVyVHlwZSIsImdldENvbHVtbkZpbHRlclByb3BzIiwiYWRkIiwiZGV0YWNoZWRGaWx0ZXIiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImxlYXZpbmdUaW1lRmlsdGVyIiwib2xkRW5kTmFtZSIsIl9yZW5hbWVzJG9sZEVuZE5hbWUiLCJfcmVmNDIiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkyIiwiX3JlbmFtZXMkdXBkYXRlZCR5QXhpIiwieUF4aXNOYW1lIiwieUF4aXNGaWVsZCIsInJlY29uY2lsZWQiLCJyZW1vdmVkTGF5ZXJJZHMiLCJfZmlsdGVyJGxheWVySWQiLCJzdXJ2aXZpbmdMYXllcnMiLCJmcm9tIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9yZW5hbWVzJGYkbmFtZSIsInJlbmFtZVRhYmxlQ29sdW1uVXBkYXRlciIsImNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXIiLCJkZWxldGVUYWJsZUNvbHVtblVwZGF0ZXIiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJuZXh0RmlsZUxvYWRJZCIsImNyZWF0ZUZpbGVMb2FkSWQiLCJsb2FkSWQiLCJmaW5pc2hGaWxlTG9hZCIsIm9uRmluaXNoIiwiZmlsZUNhY2hlIiwibG9hZEZpbGVzVXBkYXRlciIsIl9zdGF0ZSRmaWxlTG9hZGluZyRvcCIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsImNvbXBhbmlvbkZpbGVzIiwiZmlsZXNUb0xvYWQiLCJkZWZlckFkZFRvTWFwIiwiYXBwZW5kRGVmZXJyZWRGaWxlTG9hZCIsInByZXZpb3VzRXJyb3JzIiwiZnJvbUVudHJpZXMiLCJfcmVmNDMiLCJfcmVmNDQiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJfcmVmNDUiLCJsb2FkaW5nIiwiZmlsZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwic3RhdGVXaXRoQ2FjaGUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJjdXJyZW50TG9hZElkIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsImV4dGVuc2lvbnMiLCJkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzIiwiZXhwYW5zaW9uIiwiYXJjaGl2ZU5hbWUiLCJtYWtlTG9hZEZpbGVUYXNrIiwic2VlbiIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJsb2FkZXIiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiZXh0ZW5zaW9uIiwiZXh0IiwicmVwbGFjZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNvbXBhbmlvbkZpbGVzRm9yQXJjaGl2ZSIsImV4dHJhY3RlZCIsInNoYXBlZmlsZSIsImNvbXBhbmlvbnMiLCJ3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5IiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3NVcGRhdGVyIiwiYWRkRGF0YU9wdGlvbnMiLCJkaXNwbGF5TmFtZSIsImdlbiIsImNvbnRlbnQiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkMiIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWY0NiIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjQ2JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiX3JlZjQ3IiwiY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQ4IiwiZXJyb3JMb2FkSWQiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDkiLCJkYXRhSWRzIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsIm1lcmdlZCIsIl9yZWY1MSIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjUyIiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjUzIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY1MyRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNTQiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY1NSIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY1NiIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZDIiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTciLCJjb2x1bW4iLCJjdXJyZW50TW9kZSIsIkFTQ0VORElORyIsInNvcnRlZCIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1OCIsInRvZ2dsZVRhYmxlQ29sdW1uSGlkZGVuVXBkYXRlciIsIl9yZWY1OSIsInNob3dBbGxUYWJsZUNvbHVtbnNVcGRhdGVyIiwiX3JlZjYwIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY2MSIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwidmFsdWVBdCIsImpvaW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY2MiIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwidGV4dExhYmVsTGF5ZXJJbmRleGVzIiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwidXBkYXRlZENvbG9yRmllbGQiLCJ1cGRhdGVUZXh0TGFiZWwiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjYzIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNjQiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJfcmVmNjUiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY2NiIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNjciLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsImNsZWFyZWRTdGF0ZSIsImxhYmVsSWQiLCJmbG9vciIsInJhbmRvbSIsImV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyIiwiX3JlZjY4IiwiaXNUaWxlZEV4dHJhY3QiLCJyb3dDb3VudCIsImRvd25sb2FkIiwiZG93bmxvYWRDbGlwIiwicG5nIiwianNvbiIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjY5IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY3MCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNzEiLCJzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjcyIiwiX3N0YXRlJGxvYWRpbmdQcm9ncmVzIiwiX3N0YXRlJGxvYWRpbmdQcm9jZXNzIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImxheWVyVGltZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwicGxvdEJhc2VJbmRleEJ5RGF0YUlkIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY3NCIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNzUiLCJhY2N1U3RhdGUiLCJfcmVmNzYiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNzciLCJjaGlsZERhdGFJZCIsIkRBVEFTRVRfT1BfQUREX09QVElPTlMiLCJhcHBseURlcml2ZWRQcm90b0RhdGFzZXQiLCJyZXN1bHRJZCIsInJ1bkdyb3VwQnlVcGRhdGVyIiwiX2V4ZWN1dGVHcm91cEJ5IiwicnVuSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZUpvaW4iLCJydW5TcGF0aWFsSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZVNwYXRpYWxKb2luIiwicnVuU3VpdGFiaWxpdHlVcGRhdGVyIiwiX2V4ZWN1dGVTdWl0YWJpbGl0eSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBFWFBBTkRfWklQX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBleHBhbmRaaXBBcmNoaXZlU3VjY2VzcyxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MsXG4gIHNldExvYWRpbmdQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZGlzYWJsZUdwdUlmSW52ZXJ0ZWQsXG4gIGZpbHRlclR5cGVVc2VzR3B1LFxuICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQsXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBzdWNjZXNzTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXQsXG4gIEdFT0NPREVSX0RBVEFTRVRfTkFNRSxcbiAgR0VPQ09ERVJfSUNPTl9DT0xPUixcbiAgR0VPQ09ERVJfTEFZRVJfSURcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMsXG4gIGlzUG9pbnRDb3VudExhYmVsLFxuICBMQVlFUl9JRF9MRU5HVEgsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgaWZfLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7XG4gIGdldEZpbGVzVG9QYXJzZSxcbiAgaXNaaXBGaWxlTmFtZSxcbiAgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgWmlwQXJjaGl2ZUV4cGFuc2lvblxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhLFxuICBmb3JtYXRDb2x1bW5UeXBlQ29udmVyc2lvbkVycm9yLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBidWlsZERlbGV0ZUNvbHVtbkRhdGEsXG4gIGJ1aWxkUmVuYW1lQ29sdW1uRGF0YSxcbiAgY2FuTXV0YXRlRGF0YXNldFNjaGVtYSxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2hvd0FsbFRhYmxlQ29sdW1ucyxcbiAgdG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4sXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge3JlbWFwQ2hhcnRzRm9yRGF0YXNldH0gZnJvbSAnLi9jb2x1bW4tZWRpdC1yZWNvbmNpbGUnO1xuaW1wb3J0IHtcbiAgZmluZEZpZWxkc1RvU2hvdyxcbiAgZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQsXG4gIHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5XG59IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIGV4ZWN1dGVHcm91cEJ5LFxuICBleGVjdXRlSm9pbixcbiAgZXhlY3V0ZVNwYXRpYWxKb2luLFxuICBleGVjdXRlU3VpdGFiaWxpdHksXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHJlbW92ZU9wc0ZvckRhdGFzZXRzLFxuICBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcixcbiAgc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyXG59IGZyb20gJy4vZGF0YXNldC1vcHMtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIG1lcmdlUGxvdEdyb3VwQnksXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzLFxuICBvcHRpb25hbE1hcFRleHRcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIHRpbWV6b25lOiBudWxsLFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGxlZ2VuZDoge1xuICAgIGlkOiAnbGVnZW5kJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5sZWdlbmQnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgaGlkZUludmlzaWJsZUxheWVyczogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlLFxuICAgICAgY29sb3I6IEdFT0NPREVSX0lDT05fQ09MT1JcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMi41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBhbm5vdGF0aW9uOiB7XG4gICAgaWQ6ICdhbm5vdGF0aW9uJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5hbm5vdGF0aW9uJyxcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9LFxuICB6b29tT3BhY2l0eToge1xuICAgIGlkOiAnem9vbU9wYWNpdHknLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmZhZGVPblpvb20nLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgY29udHJvbGxlcnM6IFtdXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgZGVzY3JpcHRpb246IHVuZGVmaW5lZFxuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgZ3JvdXBCeXM6IFtdLFxuICBqb2luczogW10sXG4gIHN1aXRhYmlsaXRpZXM6IFtdLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGwsXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9LFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IHNhdmVkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gc2F2ZWRMYXllckNvbmZpZ1xuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKVxuICAgIDogbmV3TGF5ZXJDb25maWc7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzLCB7XG4gICAga2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiBzYXZlZExheWVyQ29uZmlnXG4gIH0pO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKFxuICAgIChmaWVsZCwgaW5kZXgpID0+XG4gICAgICBmaWVsZCAmJlxuICAgICAgZmllbGQubmFtZSAmJlxuICAgICAgIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSkgJiZcbiAgICAgIG5ld0ZpZWxkcy5maW5kSW5kZXgob3RoZXIgPT4gb3RoZXIgJiYgb3RoZXIubmFtZSA9PT0gZmllbGQubmFtZSkgPT09IGluZGV4XG4gICk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgLy8gQWdncmVnYXRpb24gZGVmYXVsdHMgYWxyZWFkeSBuYW1lIFBvaW50IENvdW50LiBVc2luZyB0aGF0IG9iamVjdCBhcyB0aGVcbiAgLy8gZW1wdHkgcGxhY2Vob2xkZXIsIHRoZW4gYXBwZW5kaW5nIHRoZSBmaWVsZCBqdXN0IHBpY2tlZCwgaW5zZXJ0cyB0aGUgc2FtZVxuICAvLyBsYWJlbCB0d2ljZS4gZGVjay5nbCB0aGVuIHJlamVjdHMgdGhlIGR1cGxpY2F0ZSBjb2xsaXNpb24gbGF5ZXIgaWRzLlxuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFt7Li4uZGVmYXVsdFRleHRMYWJlbCwgZmllbGQ6IG51bGx9XSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgLy8gVGhlIHNsb3QgaXMgZW1wdHkgdW50aWwgYSBmaWVsZCBpcyBwaWNrZWQuIEFnZ3JlZ2F0aW9uIGRlZmF1bHRzIGFscmVhZHlcbiAgICAgICAgLy8gY2FycnkgUG9pbnQgQ291bnQsIGFuZCBjb3B5aW5nIHRoYXQgZmllbGQgd291bGQgYWRkIGEgc2Vjb25kIGxhYmVsLlxuICAgICAgICBmaWVsZDogbnVsbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBGaXQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciB0eXBlIGRyb3Bkb3duIGdpdmVzIGFuIGVtcHR5IGxheWVyIGl0cyBmaXJzdFxuICogdHlwZSBhbmQgdGhhdCBsYXllciBhbHJlYWR5IHBvaW50cyBhdCBhIGRhdGFzZXQuIExhdGVyIHR5cGUgY2hhbmdlcyxcbiAqIHByb2dyYW1tYXRpYyBgbGF5ZXJUeXBlQ2hhbmdlYCwgYW5kIHNhdmVkLWNvbmZpZyBhcHBsaWVzIGxlYXZlIHRoZSBjYW1lcmFcbiAqIGFsb25lLiBHYXRlZCBieSBgZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllcmAuXG4gKi9cbmZ1bmN0aW9uIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBsYXllcjogTGF5ZXIsXG4gIGZpdEJvdW5kcz86IGJvb2xlYW5cbik6IFZpc1N0YXRlIHtcbiAgaWYgKFxuICAgICFmaXRCb3VuZHMgfHxcbiAgICBvbGRMYXllci50eXBlIHx8XG4gICAgIWxheWVyLmNvbmZpZy5kYXRhSWQgfHxcbiAgICAhZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKFtsYXllcl0pO1xuICBpZiAoIWJvdW5kcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGUsXG4gICAgQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiBmaXRNYXBCb3VuZHMoYm91bmRzKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgaWYgKCFBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobmV3VHlwZSkpIHtcbiAgICAgIGNvbnN0IHRleHRMYWJlbCA9IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwuZmlsdGVyKGxhYmVsID0+ICFpc1BvaW50Q291bnRMYWJlbChsYWJlbCkpO1xuICAgICAgaWYgKHRleHRMYWJlbC5sZW5ndGggIT09IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICB0ZXh0TGFiZWw6IHRleHRMYWJlbC5sZW5ndGggPyB0ZXh0TGFiZWwgOiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBtYXliZUZpdE1hbnVhbExheWVyQm91bmRzKG5ld1N0YXRlLCBvbGRMYXllciwgbGF5ZXIsIGFjdGlvbi5maXRCb3VuZHMpO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIC8vIEplbmtzIGJyZWFrcyBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBjb2xvcnMuIFJlY2FsY3VsYXRlIHRoZSBkb21haW4gd2hlblxuICAvLyB0aGUgY29sb3IgcmFuZ2Ugb2YgYSBKZW5rcyBjaGFubmVsIGNoYW5nZXMuXG4gIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICBPYmplY3Qua2V5cyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IG5ld0xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbm5lbD8uc2NhbGUgJiZcbiAgICAgICAgICBuZXdMYXllci5jb25maWdbY2hhbm5lbC5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmplbmtzICYmXG4gICAgICAgICAgY2hhbm5lbC5yYW5nZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24ubmV3VmlzQ29uZmlnLCBjaGFubmVsLnJhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1dpbmRvdyA9IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5hbmltYXRpb25XaW5kb3c7XG4gIGxldCBuZXh0RmlsdGVyID0gey4uLmZpbHRlciwgYW5pbWF0aW9uV2luZG93fSBhcyBGaWx0ZXI7XG5cbiAgLy8gRW50ZXJpbmcgb3IgbGVhdmluZyBpbnRlcnZhbCBwbGF5YmFjayBzbmFwcyB0aGUgd2luZG93IG9udG8gaGlzdG9ncmFtIGJpbnMuXG4gIGlmIChcbiAgICBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJlxuICAgIChwcmV2aW91c1dpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCB8fCBhbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpXG4gICkge1xuICAgIGNvbnN0IGFkanVzdGVkID0gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhcbiAgICAgIHN0YXRlLFxuICAgICAgbmV4dEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIsXG4gICAgICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQoc3RhdGUuZGF0YXNldHMsIG5leHRGaWx0ZXIsIHN0YXRlLmxheWVycylcbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFkanVzdGVkLnZhbHVlKSAmJiBhZGp1c3RlZC52YWx1ZS5ldmVyeSh2ID0+IE51bWJlci5pc0Zpbml0ZSh2KSkpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSBhZGp1c3RlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5leHRGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFmZmVjdGVkRGF0YXNldElkczogc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXJJbmRleD86IG51bWJlclxuKTogUyB7XG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcCgoZmlsdGVyLCBmaWx0ZXJJbmRleCkgPT4ge1xuICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gdXBkYXRlZEZpbHRlckluZGV4KSB7XG4gICAgICByZXR1cm4gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgZmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZERhdGFzZXRJZHMgPSBmaWx0ZXIuZGF0YUlkLmZpbHRlcihkYXRhSWQgPT4gYWZmZWN0ZWREYXRhc2V0SWRzLmluY2x1ZGVzKGRhdGFJZCkpO1xuICAgIGlmICghc2hhcmVkRGF0YXNldElkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZGF0ZWRGaWx0ZXIgPSBzaGFyZWREYXRhc2V0SWRzLnJlZHVjZShyZW1vdmVGaWx0ZXJQbG90LCBmaWx0ZXIpO1xuICAgIHJldHVybiB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBpbnZhbGlkYXRlZEZpbHRlciwgdW5kZWZpbmVkLCBzdGF0ZS5sYXllcnMpO1xuICB9KTtcblxuICByZXR1cm4gc2V0KFsnZmlsdGVycyddLCBmaWx0ZXJzLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgYWZmZWN0ZWREYXRhc2V0SWRzID0gdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBhZmZlY3RlZERhdGFzZXRJZHMsXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBVcGRhdGUgcGxvdHMgYWZ0ZXIgZmlsdGVyaW5nIHNvIHRoZXkgdXNlIHRoZSBsYXRlc3QgZmlsdGVyZWQgaW5kZXhlcy5cbiAgLy8gT3RoZXIgdGltZSBmaWx0ZXJzIG5lZWQgdGhlaXIgY2FjaGVkIGJpbnMgaW52YWxpZGF0ZWQgZm9yIHNoYXJlZCBkYXRhc2V0cy5cbiAgbmV3U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5ld1N0YXRlLCBhZmZlY3RlZERhdGFzZXRJZHMsIGlkeCk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnaW52ZXJ0ZWQnOiB7XG4gICAgICBjb25zdCBzdXBwb3J0c0ludmVyc2lvbiA9IGZpbHRlci5kYXRhSWQuZXZlcnkoXG4gICAgICAgIGRhdGFzZXRJZCA9PiAhc3RhdGUuZGF0YXNldHNbZGF0YXNldElkXT8uZGlzYWJsZURhdGFPcGVyYXRpb25cbiAgICAgICk7XG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgaW52ZXJ0ZWQ6IHN1cHBvcnRzSW52ZXJzaW9uICYmIEJvb2xlYW4odmFsdWUpXG4gICAgICB9O1xuICAgICAgaWYgKGZpbHRlci5pbnZlcnRlZCkge1xuICAgICAgICAvLyBHUFUgcmFuZ2UgdGVzdHMgY2FuIG9ubHkga2VlcCB2YWx1ZXMgaW5zaWRlIHRoZSB3aW5kb3cuXG4gICAgICAgIGZpbHRlciA9IGRpc2FibGVHcHVJZkludmVydGVkKGZpbHRlcik7XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGVVc2VzR3B1KGZpbHRlci50eXBlKSkge1xuICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKFxuICAgICAgICAgIHNldEZpbHRlckdwdU1vZGUoey4uLmZpbHRlciwgZ3B1OiB0cnVlfSwgc3RhdGUuZmlsdGVycyksXG4gICAgICAgICAgc3RhdGUuZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIGxldCBwbG90VHlwZVVwZGF0ZSA9IG5ld1Byb3AucGxvdFR5cGU7XG4gICAgICBpZiAocGxvdFR5cGVVcGRhdGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBsb3RUeXBlVXBkYXRlLCAnZ3JvdXBCeScpKSB7XG4gICAgICAgIHBsb3RUeXBlVXBkYXRlID0ge1xuICAgICAgICAgIC4uLnBsb3RUeXBlVXBkYXRlLFxuICAgICAgICAgIGdyb3VwQnk6IG1lcmdlUGxvdEdyb3VwQnkobmV3RmlsdGVyLnBsb3RUeXBlPy5ncm91cEJ5LCBwbG90VHlwZVVwZGF0ZS5ncm91cEJ5KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHBsb3RUeXBlVXBkYXRlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5ld1N0YXRlLCBkYXRhSWQpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1xuICAgID8gcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsIGxheWVyVG9SZW1vdmUuaWQpXG4gICAgOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSksXG4gICAgLy8gT25seSByZXBsYWNlIGludGVyYWN0aW9uQ29uZmlnIHdoZW4gYSBjb250cm9sbGVyIGFjdHVhbGx5IGxpc3RlZCB0aGlzIGxheWVyLlxuICAgIC8vIFBhcnRpYWwgdGVzdCBzdGF0ZXMgb21pdCBpdCwgYW5kIGFkZGluZyB0aGUga2V5IHdvdWxkIGNoYW5nZSB0aGF0IHNoYXBlLlxuICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZyAhPT0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWcgPyB7aW50ZXJhY3Rpb25Db25maWd9IDoge30pXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKFxuICAgIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIGNoYXJ0ID0+IGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkgJiYgY2hhcnQubGF5ZXJJZCA9PT0gbGF5ZXJUb1JlbW92ZS5pZFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZyk6IGNoYXJ0IGlzIExheWVyQ2hhcnRDb25maWcge1xuICByZXR1cm4gY2hhcnQudHlwZSA9PT0gJ2xheWVyQ2hhcnQnO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZywgcHJvcHM6IFBhcnRpYWw8Q2hhcnRDb25maWc+KTogQ2hhcnRDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLmNoYXJ0LFxuICAgIC4uLnByb3BzLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAuLi4ocHJvcHMuZGlzcGxheSB8fCB7fSlcbiAgICB9LFxuICAgIGNoYXJ0RGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuY2hhcnREaXNwbGF5LFxuICAgICAgLi4uKChwcm9wcyBhcyBDaGFydENvbmZpZykuY2hhcnREaXNwbGF5IHx8IHt9KVxuICAgIH1cbiAgfSBhcyBDaGFydENvbmZpZztcbn1cblxuZnVuY3Rpb24gYXhpc0ZpZWxkSWZQcmVzZW50PFQgZXh0ZW5kcyB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGw7IHRpdGxlPzogc3RyaW5nIHwgbnVsbH0+KFxuICBheGlzOiBUIHwgdW5kZWZpbmVkLFxuICBmaWVsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXhpcz8uZmllbGQ/Lm5hbWUgfHwgZmllbGROYW1lcy5oYXMoYXhpcy5maWVsZC5uYW1lKSkge1xuICAgIHJldHVybiBheGlzO1xuICB9XG4gIHJldHVybiB7Li4uYXhpcywgZmllbGQ6IG51bGwsIHRpdGxlOiBudWxsfTtcbn1cblxuZnVuY3Rpb24gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhcbiAgY2hhcnQ6IENoYXJ0Q29uZmlnLFxuICBkYXRhc2V0OiB7ZmllbGRzPzoge25hbWU6IHN0cmluZ31bXX0gfCB1bmRlZmluZWRcbik6IENoYXJ0Q29uZmlnIHtcbiAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpKTtcbiAgY29uc3QgbmV4dCA9IGNoYXJ0IGFzIENoYXJ0Q29uZmlnICYge1xuICAgIHhBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB5QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgYXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgZ3JvdXBCeT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgdmFsdWU/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICB9O1xuICByZXR1cm4gbWVyZ2VDaGFydENvbmZpZyhjaGFydCwge1xuICAgIHhBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC54QXhpcywgZmllbGROYW1lcyksXG4gICAgeUF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnlBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICBheGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5heGlzLCBmaWVsZE5hbWVzKSxcbiAgICBncm91cEJ5OiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5ncm91cEJ5LCBmaWVsZE5hbWVzKSxcbiAgICB2YWx1ZTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQudmFsdWUsIGZpZWxkTmFtZXMpXG4gIH0gYXMgUGFydGlhbDxDaGFydENvbmZpZz4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBzaG91bGRSZW1vdmU6IChjaGFydDogQ2hhcnRDb25maWcpID0+IGJvb2xlYW5cbik6IFQge1xuICBjb25zdCBjaGFydHMgPSBzdGF0ZS5jaGFydHMgfHwgW107XG4gIGNvbnN0IHJlbW92ZWQgPSBjaGFydHMuZmlsdGVyKHNob3VsZFJlbW92ZSk7XG4gIGlmICghcmVtb3ZlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVtb3ZlZElkcyA9IG5ldyBTZXQocmVtb3ZlZC5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgZmlsdGVySWRzID0gbmV3IFNldChcbiAgICByZW1vdmVkLmZsYXRNYXAoY2hhcnQgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjaGFydC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gICAgICByZXR1cm4gaWQgPyBbaWQsIGAke2lkfS14YCwgYCR7aWR9LXlgXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogY2hhcnRzLmZpbHRlcihjaGFydCA9PiAhcmVtb3ZlZElkcy5oYXMoY2hhcnQuaWQpKVxuICB9O1xuICBpZiAoZmlsdGVySWRzLnNpemUpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlIGFzIFQ7XG59XG5cbi8qKlxuICogQWRkIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NoYXJ0fTogVmlzU3RhdGVBY3Rpb25zLkFkZENoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNoYXJ0Py5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmNoYXJ0cyB8fCBbXSkuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5pZCA9PT0gY2hhcnQuaWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoZXhpc3RpbmcgPT4gKHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5leGlzdGluZy5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBpc0pzb25FZGl0b3JBY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHtcbiAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBjaGFydC5kaXNwbGF5Py5pc0NvbmZpZ0FjdGl2ZSA/PyBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSAoc3RhdGUuY2hhcnRzIHx8IFtdKS5maW5kSW5kZXgoY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmNoYXJ0c1tpZHhdO1xuICBjb25zdCBkYXRhSWRDaGFuZ2VkID0gdHlwZW9mIHByb3BzLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgcHJvcHMuZGF0YUlkICE9PSBwcmV2LmRhdGFJZDtcbiAgY29uc3QgbGF5ZXJJZENoYW5nZWQgPVxuICAgIGlzTGF5ZXJDaGFydENvbmZpZyhwcmV2KSAmJlxuICAgIHR5cGVvZiAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCA9PT0gJ3N0cmluZycgJiZcbiAgICAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCAhPT0gcHJldi5sYXllcklkO1xuICBsZXQgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcocHJldiwgcHJvcHMpO1xuICBpZiAoZGF0YUlkQ2hhbmdlZCB8fCBsYXllcklkQ2hhbmdlZCkge1xuICAgIGNvbnN0IGRhdGFJZCA9IG5leHQuZGF0YUlkIHx8IHVuZGVmaW5lZDtcbiAgICBuZXh0ID0gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhuZXh0LCBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogdW5kZWZpbmVkKTtcbiAgICBpZiAobmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCkge1xuICAgICAgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcobmV4dCwge1xuICAgICAgICBjcm9zc0ZpbHRlcjogey4uLm5leHQuY3Jvc3NGaWx0ZXIsIGVuYWJsZWQ6IGZhbHNlLCB2YWx1ZToge30sIGZpZWxkTmFtZXM6IHt9fVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYXJ0cyA9IFsuLi5zdGF0ZS5jaGFydHNdO1xuICBjaGFydHNbaWR4XSA9IG5leHQ7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0c1xuICB9O1xuICBjb25zdCBmaWx0ZXJJZCA9IG5leHQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkIHx8IHByZXYuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICBpZiAocHJldi5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiAhbmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiBmaWx0ZXJJZCkge1xuICAgIGNvbnN0IG93bmVkRmlsdGVySWRzID0gbmV3IFNldChbZmlsdGVySWQsIGAke2ZpbHRlcklkfS14YCwgYCR7ZmlsdGVySWR9LXlgXSk7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gb3duZWRGaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBjaGFydCBhbmQgYW55IGNyb3NzLWZpbHRlciBpdCBvd25zXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoc3RhdGUsIGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBwcm92aWRlZEFuZ2xlID0gTnVtYmVyLmlzRmluaXRlKChjb25maWcgYXMgYW55KT8uYW5nbGUpID8gKGNvbmZpZyBhcyBhbnkpLmFuZ2xlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZXJpdmVkRnJvbUFuZ2xlID1cbiAgICBwcm92aWRlZEFuZ2xlICE9IG51bGwgPyB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlKHByb3ZpZGVkQW5nbGUpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0ZXh0U2lkZSA9XG4gICAgY29uZmlnPy50ZXh0U2lkZSA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnNpZGUgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUpO1xuICBjb25zdCB0ZXh0VmVydGljYWxQb3NpdGlvbiA9XG4gICAgY29uZmlnPy50ZXh0VmVydGljYWxQb3NpdGlvbiA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnZlcnRpY2FsID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTik7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICAuLi4odGV4dFNpZGUgPyB7dGV4dFNpZGV9IDoge30pLFxuICAgIC4uLih0ZXh0VmVydGljYWxQb3NpdGlvbiA/IHt0ZXh0VmVydGljYWxQb3NpdGlvbn0gOiB7fSksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0QW5nbGUgPVxuICAgIHRleHRTaWRlICYmIHRleHRWZXJ0aWNhbFBvc2l0aW9uXG4gICAgICA/IEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UW2Ake3RleHRTaWRlfS0ke3RleHRWZXJ0aWNhbFBvc2l0aW9ufWBdXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoXG4gICAgICBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIGdldFpvb21PcGFjaXR5QW5ub3RhdGlvblRhcmdldElkKGlkKVxuICAgICksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIERlcml2ZWQgdGFibGVzIGFyZSBzbmFwc2hvdHM6IGtlZXAgdGhlbSB3aGVuIGEgc291cmNlIGRhdGFzZXQgaXMgZGVsZXRlZC5cbiAgLy8gT25seSBkcm9wIGluLXByb2dyZXNzIGdyb3VwLWJ5IC8gam9pbiBkcmFmdHMgdGhhdCByZWZlcmVuY2VkIHRoaXMgZGF0YXNldC5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGUsIFtkYXRhc2V0S2V5XSkgYXMgVDtcbiAgcmV0dXJuIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyKG5leHRTdGF0ZSwgZGF0YXNldEtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFQsIGRhdGFzZXRLZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBfZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogR0VPQ09ERVJfREFUQVNFVF9OQU1FfSk7XG4gIH1cblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInKSB7XG4gICAgY29uc3QgZ2VvY29kZXJMYXllciA9IG5ld1N0YXRlLmxheWVycy5maW5kKGxheWVyID0+IGxheWVyLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCk7XG4gICAgaWYgKGdlb2NvZGVyTGF5ZXIpIHtcbiAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgb2xkTGF5ZXI6IGdlb2NvZGVyTGF5ZXIsXG4gICAgICAgIG5ld0NvbmZpZzoge2NvbG9yOiBjb25maWcuY29uZmlnLmNvbG9yID8/IEdFT0NPREVSX0lDT05fQ09MT1J9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhcbiAgICAgICAgcHJvZ3Jlc3NJZCxcbiAgICAgICAgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApLFxuICAgICAgICBwcm9ncmVzcz8ucGhhc2UgPT09ICdwcm9jZXNzaW5nJyA/ICdwcm9jZXNzaW5nJyA6IHVuZGVmaW5lZFxuICAgICAgKVxuICB9KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJMb2FkaW5nUHJvZ3Jlc3Moc3RhdGU6IFZpc1N0YXRlLCBpZHM/OiBzdHJpbmdbXSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgY3VycmVudCA9IHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fTtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXMocHJvY2Vzc2luZykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319O1xuICB9XG4gIGlmICghaWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5jdXJyZW50fTtcbiAgY29uc3QgbmV4dFByb2Nlc3NpbmcgPSB7Li4ucHJvY2Vzc2luZ307XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gICAgZGVsZXRlIG5leHRQcm9jZXNzaW5nW2lkXTtcbiAgfSk7XG4gIHJldHVybiB7Li4uc3RhdGUsIGxvYWRpbmdQcm9ncmVzczogbmV4dCwgbG9hZGluZ1Byb2Nlc3Npbmc6IG5leHRQcm9jZXNzaW5nfTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgcmVhZHlUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCByZW1vdGVUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBoeWRyYXRlUHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSB7aW5mbywgLi4ucmVzdH07XG4gICAgY29uc3QgcmVtb3RlID0gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShwcm90byk7XG4gICAgaWYgKHJlbW90ZSkge1xuICAgICAgaHlkcmF0ZVByb2dyZXNzW2dldERhdGFzZXRQcm9ncmVzc0lkKHByb3RvLCBkYXRhc2V0SW5kZXgpXSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHByb3RvLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIChyZW1vdGUgPyByZW1vdGVUYXNrcyA6IHJlYWR5VGFza3MpLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZWQgZGF0YXNldHMgYXJlIGNvbW1pdHRlZCBvbiB0aGVpciBvd24uIEEgcmVtb3RlIGRvd25sb2FkIGluIHRoZSBzYW1lXG4gIC8vIGFkZCBtdXN0IG5vdCBob2xkIHRoZW0gdW50aWwgdGhlIFVSTCBmaW5pc2hlcy5cbiAgY29uc3QgcHJvZ3Jlc3NJZHMgPSBPYmplY3Qua2V5cyhoeWRyYXRlUHJvZ3Jlc3MpO1xuICBjb25zdCBiYXRjaGVzOiBBcnJheTx7dGFza3M6IFRhc2tEZXNjcmlwdG9yW107IHByb2dyZXNzSWRzOiBzdHJpbmdbXX0+ID0gW107XG4gIGlmIChyZWFkeVRhc2tzLmxlbmd0aCkge1xuICAgIGJhdGNoZXMucHVzaCh7dGFza3M6IHJlYWR5VGFza3MsIHByb2dyZXNzSWRzOiBbXX0pO1xuICB9XG4gIGlmIChyZW1vdGVUYXNrcy5sZW5ndGgpIHtcbiAgICBiYXRjaGVzLnB1c2goe3Rhc2tzOiByZW1vdGVUYXNrcywgcHJvZ3Jlc3NJZHN9KTtcbiAgfVxuXG4gIGlmIChiYXRjaGVzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKFxuICAgICAgdXBkYXRlZFN0YXRlLFxuICAgICAgcGF5bG9hZF8oe2NoYW5nZTogYmF0Y2hlcy5sZW5ndGgsIHR5cGU6ICcnfSlcbiAgICApO1xuICAgIGlmIChwcm9ncmVzc0lkcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgIC4uLmh5ZHJhdGVQcm9ncmVzc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi5iYXRjaGVzLm1hcChiYXRjaCA9PlxuICAgICAgVGFzay5hbGxTZXR0bGVkKGJhdGNoLnRhc2tzKS5tYXAocmVzdWx0cyA9PlxuICAgICAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7XG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcHJvZ3Jlc3NJZHM6IGJhdGNoLnByb2dyZXNzSWRzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9ucywgcHJvZ3Jlc3NJZHN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgY2xlYXJMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgICAgcHJvZ3Jlc3NJZHNcbiAgICApLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICAvLyBhIGxheWVyIGFscmVhZHkgaW4gYSBwYW5lbCB3YXMgbWVyZ2VkIGZyb20gc3BsaXQgbWFwcywgd2hpY2ggZGVjaWRlIHRoZSBwYW5lbHMgc2hvd2luZyBpdFxuICAgIGNvbnN0IGxheWVyc05vdEluU3BsaXRNYXBzID0gbmV3TGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gIW1lcmdlZFN0YXRlLnNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIGxheWVyc05vdEluU3BsaXRNYXBzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gICAgLy8gQSB0aWxlc2V0IGFjY2VzcyB0b2tlbiBpcyByZWFkIHdoaWxlIGZvcm1hdHRpbmcgbGF5ZXIgZGF0YS4gUmVmcmVzaFxuICAgIC8vIG9ubHkgd2hlbiB0aGF0IGZpZWxkIGNoYW5nZXMgc28gb3RoZXIgbWV0YWRhdGEgZWRpdHMgKGUuZy4gcmVmcmVzaFxuICAgIC8vIGludGVydmFsKSBkbyBub3QgcmVidWlsZCBldmVyeSBsYXllciBvbiB0aGUgZGF0YXNldC5cbiAgICBpZiAocHJvcHMubWV0YWRhdGEgJiYgJ3RpbGUzZEFjY2Vzc1Rva2VuJyBpbiBwcm9wcy5tZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBvciByZS10eXBlZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHRsLmZpZWxkPy5uYW1lO1xuICAgICAgY29uc3QgZmllbGQgPVxuICAgICAgICBuYW1lICYmIG5ld1RhYmxlLmZpZWxkcy5maW5kKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gKHJlbmFtZXNbbmFtZV0gPz8gbmFtZSkpO1xuICAgICAgcmV0dXJuIGZpZWxkICYmIChmaWVsZC5uYW1lICE9PSBuYW1lIHx8IGZpZWxkLnR5cGUgIT09IHRsLmZpZWxkPy50eXBlKSA/IHsuLi50bCwgZmllbGR9IDogdGw7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbmNvbnN0IEZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXIsIEFMTF9GSUVMRF9UWVBFUy5yZWFsXSk7XG5cbmZ1bmN0aW9uIGNsZWFyVGltZWxpbmVGaWx0ZXJTdGF0ZShmaWx0ZXI6IEZpbHRlcik6IEZpbHRlciB7XG4gIGNvbnN0IHtcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogX3N5bmNlZFdpdGhMYXllclRpbWVsaW5lLFxuICAgIHN5bmNUaW1lbGluZU1vZGU6IF9zeW5jVGltZWxpbmVNb2RlLFxuICAgIHRpbWVCaW5zOiBfdGltZUJpbnMsXG4gICAgbGluZUNoYXJ0OiBfbGluZUNoYXJ0LFxuICAgIHRpbWV6b25lOiBfdGltZXpvbmUsXG4gICAgaW52ZXJ0VHJlbmRDb2xvcjogX2ludmVydFRyZW5kQ29sb3IsXG4gICAgc2hvd1RpbWVEaXNwbGF5OiBfc2hvd1RpbWVEaXNwbGF5LFxuICAgIC4uLnJlc3RcbiAgfSA9IGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN0LFxuICAgIGZpeGVkRG9tYWluOiBmYWxzZSxcbiAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmZyZWUsXG4gICAgeUF4aXM6IG51bGwsXG4gICAgcGxvdFR5cGU6IHt0eXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbX1cbiAgfSBhcyBGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwoXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IEZpbHRlciB7XG4gIGlmIChmaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjb25zdCBwcmltYXJ5RGF0YXNldCA9IGRhdGFzZXRzW2ZpbHRlci5kYXRhSWRbMF1dO1xuICBjb25zdCB5QXhpcyA9IGZpbHRlci55QXhpcz8ubmFtZVxuICAgID8gcHJpbWFyeURhdGFzZXQ/LmZpZWxkcy5maW5kKFxuICAgICAgICBmaWVsZCA9PiBmaWVsZC5uYW1lID09PSBmaWx0ZXIueUF4aXM/Lm5hbWUgJiYgRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTLmhhcyhmaWVsZC50eXBlKVxuICAgICAgKSA/PyBudWxsXG4gICAgOiBudWxsO1xuICBjb25zdCBncm91cEJ5RmllbGROYW1lID0gZmlsdGVyLnBsb3RUeXBlPy5ncm91cEJ5Py5maWVsZE5hbWU7XG4gIGNvbnN0IGhhc0dyb3VwQnlGaWVsZCA9IGdyb3VwQnlGaWVsZE5hbWVcbiAgICA/IHByaW1hcnlEYXRhc2V0Py5maWVsZHMuc29tZShmaWVsZCA9PiBmaWVsZC5uYW1lID09PSBncm91cEJ5RmllbGROYW1lKVxuICAgIDogdHJ1ZTtcbiAgY29uc3QgcGxvdFR5cGUgPSB7XG4gICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgIC4uLihmaWx0ZXIueUF4aXMgJiYgIXlBeGlzID8ge3R5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtfSA6IHt9KSxcbiAgICAuLi4oIWhhc0dyb3VwQnlGaWVsZCA/IHtncm91cEJ5OiBudWxsfSA6IHt9KVxuICB9O1xuXG4gIHJldHVybiB7Li4uZmlsdGVyLCB5QXhpcywgcGxvdFR5cGUsIGxpbmVDaGFydDogdW5kZWZpbmVkfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBjb25zdCBbc29ydGVkQ29sdW1uLCBzb3J0TW9kZV0gPSBPYmplY3QuZW50cmllcyhleGlzdGluZy5zb3J0Q29sdW1uIHx8IHt9KVswXSB8fCBbXTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuICBuZXdUYWJsZS5kYXRhUmV2aXNpb24gPSBleGlzdGluZy5kYXRhUmV2aXNpb24gKyAxO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IE1hcChuZXdUYWJsZS5maWVsZHMubWFwKGZpZWxkID0+IFtmaWVsZC5uYW1lLCBmaWVsZF0pKTtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkpO1xuICBuZXdUYWJsZS5oaWRkZW5Db2x1bW5zID0gKGV4aXN0aW5nLmhpZGRlbkNvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSk7XG4gIGNvbnN0IG5leHRTb3J0ZWRDb2x1bW4gPSBzb3J0ZWRDb2x1bW4gPyByZW5hbWVzW3NvcnRlZENvbHVtbl0gPz8gc29ydGVkQ29sdW1uIDogbnVsbDtcbiAgaWYgKG5leHRTb3J0ZWRDb2x1bW4gJiYgc29ydE1vZGUgJiYgbmV3RmllbGRzQnlOYW1lLmhhcyhuZXh0U29ydGVkQ29sdW1uKSkge1xuICAgIHNvcnREYXRhc2V0QnlDb2x1bW4obmV3VGFibGUsIG5leHRTb3J0ZWRDb2x1bW4sIHNvcnRNb2RlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuICBjb25zdCBkYXRhc2V0SWRzVG9SZWZpbHRlciA9IG5ldyBTZXQ8c3RyaW5nPihbZGF0YUlkXSk7XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUG9seWdvbiBmaWx0ZXJzIHRhcmdldCBsYXllcnMgcmF0aGVyIHRoYW4gZGF0YXNldCBmaWVsZHMsIHNvIGEgY29sdW1uXG4gICAgICAvLyB0eXBlIGNoYW5nZSBzaG91bGQgbm90IHJlY29uY2lsZSB0aGVtIGFnYWluc3QgdGhlIGZpZWxkIGxpc3QuXG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcbiAgICAgIGNvbnN0IG5leHRGaWx0ZXJUeXBlID0gZmllbGRJZHggPT09IC0xID8gbnVsbCA6IG5ld1RhYmxlLmdldENvbHVtbkZpbHRlclByb3BzKG5ld05hbWUpPy50eXBlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkSWR4ID09PSAtMSB8fFxuICAgICAgICAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxICYmIG5leHRGaWx0ZXJUeXBlICYmIG5leHRGaWx0ZXJUeXBlICE9PSBmaWx0ZXIudHlwZSlcbiAgICAgICkge1xuICAgICAgICAvLyBEcm9wIGEgbWlzc2luZyBmaWVsZCBvciBkZXRhY2ggYW4gaW5jb21wYXRpYmxlIHN5bmNlZCBtZW1iZXIuXG4gICAgICAgIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlci5kYXRhSWQuZm9yRWFjaChpZCA9PiBkYXRhc2V0SWRzVG9SZWZpbHRlci5hZGQoaWQpKTtcbiAgICAgICAgY29uc3QgZGV0YWNoZWRGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgICAgcmV0dXJuIHZpID09PSAwXG4gICAgICAgICAgPyByZWNvbmNpbGVUaW1lbGluZVBsb3RBZnRlclByaW1hcnlSZW1vdmFsKGRldGFjaGVkRmlsdGVyLCBuZXdEYXRhc2V0cylcbiAgICAgICAgICA6IGRldGFjaGVkRmlsdGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGxldCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBsZWF2aW5nVGltZUZpbHRlciA9XG4gICAgICAgIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHVwZGF0ZWQudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZTtcblxuICAgICAgY29uc3Qgb2xkRW5kTmFtZSA9IHRvQXJyYXkoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLmVuZE5hbWUpW3ZpXTtcbiAgICAgIGlmICh1cGRhdGVkLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgb2xkRW5kTmFtZSkge1xuICAgICAgICBjb25zdCBlbmROYW1lID0gcmVuYW1lc1tvbGRFbmROYW1lXSA/PyBvbGRFbmROYW1lO1xuICAgICAgICB1cGRhdGVkID1cbiAgICAgICAgICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUodXBkYXRlZCwgbmV3RGF0YXNldHMsIGRhdGFJZCwgZW5kTmFtZSwgdmkpLmZpbHRlciA/P1xuICAgICAgICAgIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSh1cGRhdGVkLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBudWxsLCB2aSkuZmlsdGVyID8/XG4gICAgICAgICAgdXBkYXRlZDtcbiAgICAgIH1cblxuICAgICAgLy8gVGltZSBwbG90cyBvbmx5IGFjY2VwdCBudW1lcmljIHktYXhpcyBmaWVsZHMuIFJlLXJlc29sdmUgdGhlIGNvbXBsZXRlXG4gICAgICAvLyBmaWVsZCBzbyB0eXBlIGFuZCBmaWVsZElkeCBhbHNvIGZvbGxvdyBhIHNjaGVtYSBjaGFuZ2UuXG4gICAgICBsZXQgeUF4aXMgPSB1cGRhdGVkLnlBeGlzO1xuICAgICAgaWYgKHZpID09PSAwICYmIHVwZGF0ZWQueUF4aXM/Lm5hbWUpIHtcbiAgICAgICAgY29uc3QgeUF4aXNOYW1lID0gcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdID8/IHVwZGF0ZWQueUF4aXMubmFtZTtcbiAgICAgICAgY29uc3QgeUF4aXNGaWVsZCA9IG5ld0ZpZWxkc0J5TmFtZS5nZXQoeUF4aXNOYW1lKTtcbiAgICAgICAgeUF4aXMgPSB5QXhpc0ZpZWxkICYmIEZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUy5oYXMoeUF4aXNGaWVsZC50eXBlKSA/IHlBeGlzRmllbGQgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV4dEZpbHRlciA9IHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC4uLih1cGRhdGVkLnlBeGlzICYmICF5QXhpc1xuICAgICAgICAgID8ge3Bsb3RUeXBlOiB7Li4udXBkYXRlZC5wbG90VHlwZSwgdHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW19fVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgICBpZiAobGVhdmluZ1RpbWVGaWx0ZXIpIHtcbiAgICAgICAgbmV4dEZpbHRlciA9IGNsZWFyVGltZWxpbmVGaWx0ZXJTdGF0ZShuZXh0RmlsdGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodmkgPT09IDAgJiYgbmV4dEZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwQnkgPSBuZXh0RmlsdGVyLnBsb3RUeXBlLmdyb3VwQnk7XG4gICAgICAgIGlmIChncm91cEJ5ICYmIHJlbmFtZXNbZ3JvdXBCeS5maWVsZE5hbWVdKSB7XG4gICAgICAgICAgbmV4dEZpbHRlci5wbG90VHlwZSA9IHtcbiAgICAgICAgICAgIC4uLm5leHRGaWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgICBncm91cEJ5OiB7Li4uZ3JvdXBCeSwgZmllbGROYW1lOiByZW5hbWVzW2dyb3VwQnkuZmllbGROYW1lXX1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFRpbWVsaW5lIGJpbnMgY2FuIHJlbWFpbiBpZGVudGljYWwgd2hpbGUgeS1heGlzIG9yIGdyb3VwLWJ5IHZhbHVlc1xuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRvIG5vdCByZXVzZSB0aGUgb2xkIHNlcmllcyBjYWNoZSBhZnRlciBhIGRhdGEgcmVidWlsZC5cbiAgICAgICAgbmV4dEZpbHRlciA9IHsuLi5uZXh0RmlsdGVyLCBsaW5lQ2hhcnQ6IHVuZGVmaW5lZH07XG4gICAgICB9XG4gICAgICAvLyBLZWVwIGV4aXN0aW5nIHBsb3RzOyB0aW1lIHBsb3RzIGFyZSByZWJ1aWx0IGFmdGVyIGZpbHRlcmluZyBiZWxvdy5cbiAgICAgIHJldHVybiBmaWx0ZXIudHlwZSA9PT0gbmV4dEZpbHRlci50eXBlIHx8IG5leHRGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZVxuICAgICAgICA/IG5leHRGaWx0ZXJcbiAgICAgICAgOiB1cGRhdGVGaWx0ZXJQbG90KG5ld0RhdGFzZXRzLCBuZXh0RmlsdGVyLCBkYXRhSWQsIHN0YXRlLmxheWVycyk7XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIDMuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyBQb2x5Z29uIGZpbHRlcnMgcmVmZXJlbmNlIGxheWVycywgbm90IGZpZWxkcy4gUHJlc2VydmUgdGhlbSBmb3Igc2NoZW1hXG4gIC8vIGVkaXRzIHRoYXQga2VlcCB0aGVpciB0YXJnZXQgbGF5ZXJzLCBidXQgcmVtb3ZlIGludmFsaWQgdGFyZ2V0cyBiZWZvcmVcbiAgLy8gcmVidWlsZGluZyBmaWx0ZXIgcmVjb3JkcyB3aGVuIGEgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHdhcyBkZWxldGVkLlxuICBjb25zdCByZW1vdmVkTGF5ZXJJZHMgPSBuZXcgU2V0KGxheWVyc1RvUmVtb3ZlKTtcbiAgaWYgKHJlbW92ZWRMYXllcklkcy5zaXplKSB7XG4gICAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMuZmxhdE1hcChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnBvbHlnb24gfHxcbiAgICAgICAgIWZpbHRlci5sYXllcklkPy5zb21lKGlkID0+IHJlbW92ZWRMYXllcklkcy5oYXMoaWQpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBbZmlsdGVyXTtcbiAgICAgIH1cbiAgICAgIGZpbHRlci5kYXRhSWQuZm9yRWFjaChpZCA9PiBkYXRhc2V0SWRzVG9SZWZpbHRlci5hZGQoaWQpKTtcbiAgICAgIGNvbnN0IGxheWVySWQgPSBmaWx0ZXIubGF5ZXJJZC5maWx0ZXIoaWQgPT4gIXJlbW92ZWRMYXllcklkcy5oYXMoaWQpKTtcbiAgICAgIHJldHVybiBsYXllcklkLmxlbmd0aCA/IFt7Li4uZmlsdGVyLCBsYXllcklkfV0gOiBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZC5cbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyA0LiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSB1c2luZyBvbmx5IGxheWVycyB0aGF0IHdpbGwgc3Vydml2ZVxuICBjb25zdCBzdXJ2aXZpbmdMYXllcnMgPSBuZXdMYXllcnMuZmlsdGVyKGxheWVyID0+ICFyZW1vdmVkTGF5ZXJJZHMuaGFzKGxheWVyLmlkKSk7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIEFycmF5LmZyb20oZGF0YXNldElkc1RvUmVmaWx0ZXIpLFxuICAgIG5ld0RhdGFzZXRzLFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3Vydml2aW5nTGF5ZXJzXG4gICk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGNoYXJ0czogcmVtYXBDaGFydHNGb3JEYXRhc2V0KHN0YXRlLmNoYXJ0cywgZGF0YUlkLCByZW5hbWVzLCBuZXdGaWVsZHNCeU5hbWUpXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIEZpbHRlcmluZyBhbmQgcG9seWdvbi1sYXllciByZW1vdmFsIGNhbiBjaGFuZ2UgdGhlIHJvd3MgYmVoaW5kIHRpbWVsaW5lXG4gIC8vIHBsb3RzLCBzbyByZWJ1aWxkIHRoZWlyIGNhY2hlZCBiaW5zL3NlcmllcyBmcm9tIHRoZSByZWNvbmNpbGVkIHN0YXRlLlxuICBuZXh0U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5leHRTdGF0ZSwgQXJyYXkuZnJvbShkYXRhc2V0SWRzVG9SZWZpbHRlcikpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGEgY29sdW1uJ3Mgc3RvcmVkIGlkZW50aXR5IChgZmllbGQubmFtZWApIGFuZCBldmVyeSBsYXllciwgZmlsdGVyLFxuICogdG9vbHRpcCwgYW5kIGNoYXJ0IHJlZmVyZW5jZSB0aGF0IHVzZWQgdGhlIG9sZCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBmaWVsZE5hbWUsIG5ld05hbWV9ID0gYWN0aW9uO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFjYW5NdXRhdGVEYXRhc2V0U2NoZW1hKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBidWlsZFJlbmFtZUNvbHVtbkRhdGEoZGF0YXNldCwgZmllbGROYW1lLCBuZXdOYW1lKTtcbiAgaWYgKCFwYXlsb2FkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFJZCxcbiAgICBkYXRhOiBwYXlsb2FkLmRhdGEsXG4gICAgcmVuYW1lczogcGF5bG9hZC5yZW5hbWVzXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBjb21wbGV0ZSBjb2x1bW4gYmVmb3JlIGNvbW1pdHRpbmcgaXRzIG5ldyB0eXBlLiBBIGZhaWxlZCB2YWx1ZVxuICogbGVhdmVzIHRoZSB0YWJsZSBhbmQgZXZlcnkgcmVmZXJlbmNlIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ2hhbmdlVGFibGVDb2x1bW5UeXBlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBmaWVsZE5hbWUsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFjYW5NdXRhdGVEYXRhc2V0U2NoZW1hKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGJ1aWxkQ2hhbmdlQ29sdW1uVHlwZURhdGEoZGF0YXNldCwgZmllbGROYW1lLCBuZXdUeXBlKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgaWQ6IGBjb2x1bW4tdHlwZS0ke2RhdGFJZH0tJHtmaWVsZE5hbWV9YCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDYW5ub3QgY2hhbmdlIOKAnCR7ZmllbGROYW1lfeKAnSB0byAke25ld1R5cGV9OiAke2Zvcm1hdENvbHVtblR5cGVDb252ZXJzaW9uRXJyb3IoXG4gICAgICAgICAgICAgIHJlc3VsdC5lcnJvclxuICAgICAgICAgICAgKX0uIE5vIHZhbHVlcyB3ZXJlIGNoYW5nZWQuYFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFJZCxcbiAgICBkYXRhOiByZXN1bHQucGF5bG9hZC5kYXRhLFxuICAgIHJlbmFtZXM6IHJlc3VsdC5wYXlsb2FkLnJlbmFtZXNcbiAgfSk7XG59XG5cbi8qKlxuICogRHJvcCBhIGNvbHVtbiBhbmQgdGhlIGxheWVycywgZmlsdGVycywgYW5kIG90aGVyIHJlZmVyZW5jZXMgdGhhdCByZXF1aXJlZCBpdC5cbiAqIFRoZSBsYXN0IHJlbWFpbmluZyBjb2x1bW4gaXMga2VwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZmllbGROYW1lfSA9IGFjdGlvbjtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCAhY2FuTXV0YXRlRGF0YXNldFNjaGVtYShkYXRhc2V0KSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gYnVpbGREZWxldGVDb2x1bW5EYXRhKGRhdGFzZXQsIGZpZWxkTmFtZSk7XG4gIGlmICghcGF5bG9hZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhSWQsXG4gICAgZGF0YTogcGF5bG9hZC5kYXRhLFxuICAgIHJlbmFtZXM6IHBheWxvYWQucmVuYW1lc1xuICB9KTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xubGV0IG5leHRGaWxlTG9hZElkID0gMTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsZUxvYWRJZCgpOiBudW1iZXIge1xuICBjb25zdCBsb2FkSWQgPSBuZXh0RmlsZUxvYWRJZDtcbiAgbmV4dEZpbGVMb2FkSWQgKz0gMTtcbiAgcmV0dXJuIGxvYWRJZDtcbn1cblxuZnVuY3Rpb24gZmluaXNoRmlsZUxvYWQoXG4gIG9uRmluaXNoOiAocGF5bG9hZDogYW55LCBvcHRpb25zPzogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMpID0+IGFueSxcbiAgZmlsZUNhY2hlOiBhbnlbXSxcbiAgb3B0aW9uczogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGxvYWRJZDogbnVtYmVyXG4pIHtcbiAgY29uc3QgYWN0aW9uID0gb3B0aW9ucyA/IG9uRmluaXNoKGZpbGVDYWNoZSwgb3B0aW9ucykgOiBvbkZpbmlzaChmaWxlQ2FjaGUpO1xuICByZXR1cm4gey4uLmFjdGlvbiwgbG9hZElkfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzcywgb3B0aW9uc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuXG4gIC8vIEFub3RoZXIgZHJvcCB3aGlsZSBhIGRlZmVycmVkIHBhcnNlIGlzIHJ1bm5pbmcgbXVzdCBqb2luIHRoYXQgbG9hZC5cbiAgLy8gUmVwbGFjaW5nIGBmaWxlTG9hZGluZ2AgbWFrZXMgdGhlIGluLWZsaWdodCBmaWxlIGZpbmlzaCBhZ2FpbnN0IHRoZSBuZXdcbiAgLy8gY2FjaGUgYW5kIGRyb3AgdGhlIGZpbGVzIHRoYXQgd2VyZSBhbHJlYWR5IGJlaW5nIHBhcnNlZC5cbiAgaWYgKHN0YXRlLmZpbGVMb2FkaW5nICYmIHN0YXRlLmZpbGVMb2FkaW5nLm9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgb3B0aW9ucz8uZGVmZXJBZGRUb01hcCkge1xuICAgIHJldHVybiBhcHBlbmREZWZlcnJlZEZpbGVMb2FkKHN0YXRlLCB7ZmlsZXNUb0xvYWQsIGNvbXBhbmlvbkZpbGVzfSk7XG4gIH1cblxuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEEgZGVmZXJyZWQgbG9hZCBpcyBhbm90aGVyIGJhdGNoIGZvciB0aGUgc2FtZSBBZGQgRGF0YSBjbGljay4gS2VlcCBmaWxlc1xuICAvLyBhbHJlYWR5IHN0YWdlZCwgYW5kIGtlZXAgdGhlaXIgZXJyb3IgY2FyZHMsIGluc3RlYWQgb2Ygc3RhcnRpbmcgb3Zlci5cbiAgY29uc3QgcHJldmlvdXNFcnJvcnMgPVxuICAgIG9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlPy5lcnJvcilcbiAgICAgICAgKVxuICAgICAgOiB7fTtcblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHByZXZpb3VzRXJyb3JzXG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgbG9hZElkOiBjcmVhdGVGaWxlTG9hZElkKCksXG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICBvbkZpbmlzaCxcbiAgICAuLi4ob3B0aW9ucyA/IHtvcHRpb25zfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7XG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZyxcbiAgICAuLi4ob3B0aW9ucz8uZGVmZXJBZGRUb01hcCA/IHt9IDoge3N0YWdlZFRvQWRkOiBudWxsfSlcbiAgfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIGRyb3AgdG8gdGhlIGRlZmVycmVkIGxvYWQgdGhhdCBpcyBhbHJlYWR5IHBhcnNpbmcuXG4gKiBUaGUgY3VycmVudCBmaWxlIGtlZXBzIGl0cyBjYWNoZTsgdGhlIG5ldyBmaWxlcyBydW4gYWZ0ZXIgaXQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZERlZmVycmVkRmlsZUxvYWQoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzXG4gIH06IHtcbiAgICBmaWxlc1RvTG9hZDogRmlsZVtdO1xuICAgIGNvbXBhbmlvbkZpbGVzOiBGaWxlW107XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWxvYWRpbmcgfHwgKCFmaWxlc1RvTG9hZC5sZW5ndGggJiYgIWNvbXBhbmlvbkZpbGVzLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmaWxlLCBpbmRleCkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSkoYWNjdSksXG4gICAgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkOiBbLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKSwgLi4uZmlsZXNUb0xvYWRdLFxuICAgICAgY29tcGFuaW9uRmlsZXM6IFsuLi4obG9hZGluZy5jb21wYW5pb25GaWxlcyB8fCBbXSksIC4uLmNvbXBhbmlvbkZpbGVzXVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3QgbG9hZElkID0gc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIC8vIERlY2lkZSBhZnRlciB0aGUgcGF1c2UsIGFuZCBvbmx5IGZvciB0aGlzIGxvYWQuIEEgZHJvcCBkdXJpbmcgdGhlc2VcbiAgLy8gMjAwbXMgam9pbnMgdGhlIHF1ZXVlOyBjYW5jZWwgb3IgYSBuZXdlciBsb2FkIG1ha2VzIHRoaXMgY29udGludWF0aW9uIHN0YWxlLlxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlLCBhY3Rpb24/OiB7bG9hZElkPzogbnVtYmVyfSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZElkID0gYWN0aW9uPy5sb2FkSWQ7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGxvYWRJZCAhPSBudWxsICYmIHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gbG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGxvYWRJZDogY3VycmVudExvYWRJZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+IGZpbmlzaEZpbGVMb2FkKG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGN1cnJlbnRMb2FkSWQpKVxuICAgICk7XG4gIH1cbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICBpZiAoaXNaaXBGaWxlTmFtZShmaWxlLm5hbWUpKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgICBFWFBBTkRfWklQX1RBU0soe2ZpbGUsIGV4dGVuc2lvbnM6IGRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMobG9hZGVycyl9KS5iaW1hcChcbiAgICAgICAgZXhwYW5zaW9uID0+XG4gICAgICAgICAgZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3Moe1xuICAgICAgICAgICAgbG9hZElkOiBjdXJyZW50TG9hZElkLFxuICAgICAgICAgICAgYXJjaGl2ZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIGV4cGFuc2lvblxuICAgICAgICAgIH0pLFxuICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyLCBjdXJyZW50TG9hZElkKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWQsXG4gICAgICBvcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzKFxuICBsb2FkZXJzOiBBcnJheTx7ZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdfT4gPSBbXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBsb2FkZXI/LmV4dGVuc2lvbnMgfHwgW10pIHtcbiAgICAgIGNvbnN0IGV4dCA9IFN0cmluZyhleHRlbnNpb24pLnJlcGxhY2UoL15cXC4vLCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIWV4dCB8fCBleHQgPT09ICd6aXAnIHx8IHNlZW4uaGFzKGV4dCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChleHQpO1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKGV4dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBleHRlbnNpb25zO1xufVxuXG5mdW5jdGlvbiBjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUoZXhwYW5zaW9uOiBaaXBBcmNoaXZlRXhwYW5zaW9uLCBleGlzdGluZz86IEZpbGVbXSk6IEZpbGVbXSB7XG4gIGNvbnN0IGV4dHJhY3RlZCA9XG4gICAgZXhwYW5zaW9uLmtpbmQgPT09ICdzaGFwZWZpbGUnXG4gICAgICA/IFtleHBhbnNpb24uc2hhcGVmaWxlLCAuLi5leHBhbnNpb24uY29tcGFuaW9uc11cbiAgICAgIDogWy4uLmV4cGFuc2lvbi5kYXRhc2V0cywgLi4uZXhwYW5zaW9uLmNvbXBhbmlvbnNdO1xuICByZXR1cm4gWy4uLmV4dHJhY3RlZCwgLi4uKGV4aXN0aW5nIHx8IFtdKV07XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkoXG4gIHByb2dyZXNzOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddLFxuICBmaWxlTmFtZTogc3RyaW5nXG4pOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddIHtcbiAgaWYgKCFwcm9ncmVzcyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb2dyZXNzLCBmaWxlTmFtZSkpIHtcbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5wcm9ncmVzc307XG4gIGRlbGV0ZSBuZXh0W2ZpbGVOYW1lXTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogQXBwbHkgYW4gdW5wYWNrZWQgemlwLiBPbmUgc2hhcGVmaWxlIGtlZXBzIHRoZSBhcmNoaXZlIG5hbWUuIEFueSBvdGhlclxuICogbWl4IGlzIHF1ZXVlZCBhcyBvbmUgZGF0YXNldCBwZXIgc3VwcG9ydGVkIG1lbWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5FeHBhbmRaaXBBcmNoaXZlU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkaW5nID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghbG9hZGluZyB8fCBsb2FkaW5nLmxvYWRJZCAhPT0gYWN0aW9uLmxvYWRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7YXJjaGl2ZU5hbWUsIGV4cGFuc2lvbn0gPSBhY3Rpb247XG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlKGV4cGFuc2lvbiwgbG9hZGluZy5jb21wYW5pb25GaWxlcyk7XG5cbiAgaWYgKGV4cGFuc2lvbi5raW5kID09PSAnc2hhcGVmaWxlJykge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7Y29tcGFuaW9uRmlsZXN9KSkoc3RhdGUpO1xuICAgIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBuZXh0U3RhdGUsXG4gICAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgICBleHBhbnNpb24uc2hhcGVmaWxlLFxuICAgICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgICAgbG9hZGVycyxcbiAgICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgICAgICBsb2FkaW5nLm9wdGlvbnMsXG4gICAgICAgIGFyY2hpdmVOYW1lXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0gZXhwYW5zaW9uLmRhdGFzZXRzO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IFsuLi5kYXRhc2V0cywgLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKV07XG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBkYXRhc2V0cy5yZWR1Y2UoXG4gICAgKGFjY3UsIGZpbGUsIGluZGV4KSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpKShhY2N1KSxcbiAgICB3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5KHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGFyY2hpdmVOYW1lKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkLFxuICAgICAgY29tcGFuaW9uRmlsZXNcbiAgICB9XG4gIH07XG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSwge2xvYWRJZDogYWN0aW9uLmxvYWRJZH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXSxcbiAgYWRkRGF0YU9wdGlvbnM/OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucyxcbiAgZmlsZU5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBkaXNwbGF5TmFtZSA9IGZpbGVOYW1lIHx8IGZpbGUubmFtZTtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtcbiAgICBmaWxlLFxuICAgIGZpbGVDYWNoZSxcbiAgICBsb2FkZXJzLFxuICAgIGxvYWRPcHRpb25zLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIC4uLihmaWxlTmFtZSA/IHtmaWxlTmFtZX0gOiB7fSlcbiAgfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pLFxuICAgICAgICAuLi4oYWRkRGF0YU9wdGlvbnMgPyB7b3B0aW9uczogYWRkRGF0YU9wdGlvbnN9IDoge30pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihkaXNwbGF5TmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2gsIG9wdGlvbnN9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICBjb25zdCBkZWZlckFkZFRvTWFwID0gQm9vbGVhbihvcHRpb25zPy5kZWZlckFkZFRvTWFwKTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgICFkZWZlckFkZFRvTWFwICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiAob3B0aW9ucyA/IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0LCBvcHRpb25zKSA6IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2gsXG4gICAgICAgICAgICAgIC4uLihvcHRpb25zID8ge29wdGlvbnN9IDoge30pXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8qKlxuICogRHJvcCBmaWxlcyB3YWl0aW5nIG9uIHRoZSBBZGQgRGF0YSBidXR0b24gYW5kIGFib3J0IGFuIGluLXByb2dyZXNzIG1vZGFsIGxvYWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIHN0YWdlZFRvQWRkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZSwgbG9hZElkOiBlcnJvckxvYWRJZH06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGVycm9yTG9hZElkICE9IG51bGwgJiYgc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkICE9PSBlcnJvckxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBjb25zdCBsb2FkSWQgPSBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQ7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBTYW1lIHBhdXNlIGFzIGEgc3VjY2Vzc2Z1bCBmaWxlLiBSZS1jaGVjayB0aGlzIGxvYWQncyBxdWV1ZSB3aGVuIGl0IGVuZHMuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5leHQgPSB7Li4uc3RhdGUubWFwSW5mbywgLi4uYWN0aW9uLmluZm99O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcEluZm86IHtcbiAgICAgIHRpdGxlOiBvcHRpb25hbE1hcFRleHQobmV4dC50aXRsZSksXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9uYWxNYXBUZXh0KG5leHQuZGVzY3JpcHRpb24pXG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVRhYmxlQ29sdW1uSGlkZGVuVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlVGFibGVDb2x1bW5IaWRkZW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgdG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4oZGF0YXNldCwgY29sdW1uKSwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlNob3dBbGxUYWJsZUNvbHVtbnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc2hvd0FsbFRhYmxlQ29sdW1ucyhkYXRhc2V0KSwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbiAgY29uc3QgdGV4dExhYmVsTGF5ZXJJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8vIExheWVyIGNvbmZpZ3MgcmV0YWluIHRoZWlyIG93biBmaWVsZCBvYmplY3RzLCBzbyBrZWVwIHRob3NlIGNvcGllcyBpbiBzeW5jXG4gIC8vIHdpdGggdGhlIGRpc3BsYXkgZm9ybWF0IHN0b3JlZCBvbiB0aGUgZGF0YXNldCBmaWVsZC5cbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKChsYXllciwgbGF5ZXJJbmRleCkgPT4ge1xuICAgICAgLy8gQ29sdW1uIG5hbWVzIGFyZSBub3QgdW5pcXVlIGFjcm9zcyBkYXRhc2V0cy4gT25seSB1cGRhdGUgbGF5ZXJzIHRoYXRcbiAgICAgIC8vIGJlbG9uZyB0byB0aGUgZGF0YXNldCB0YXJnZXRlZCBieSB0aGlzIGFjdGlvbi5cbiAgICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xvckZpZWxkID0gbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkO1xuICAgICAgY29uc3QgdXBkYXRlZENvbG9yRmllbGQgPVxuICAgICAgICBjb2xvckZpZWxkPy5uYW1lICYmIGNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgICAgPyB7Li4uY29sb3JGaWVsZCwgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tjb2xvckZpZWxkLm5hbWVdfVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIC8vIFRleHQgbGFiZWxzIGFsc28ga2VlcCBmaWVsZCBjb3BpZXMgaW5zdGVhZCBvZiByZWFkaW5nIGRhdGFzZXQuZmllbGRzIGF0IHJlbmRlciB0aW1lLlxuICAgICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAobGFiZWwgPT4ge1xuICAgICAgICBjb25zdCB7ZmllbGR9ID0gbGFiZWw7XG4gICAgICAgIHJldHVybiBmaWVsZD8ubmFtZSAmJiBmaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgICA/IHsuLi5sYWJlbCwgZmllbGQ6IHsuLi5maWVsZCwgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tmaWVsZC5uYW1lXX19XG4gICAgICAgICAgOiBsYWJlbDtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXBkYXRlVGV4dExhYmVsID0gdGV4dExhYmVsLnNvbWUoXG4gICAgICAgIChsYWJlbCwgaW5kZXgpID0+IGxhYmVsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2luZGV4XVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVUZXh0TGFiZWwpIHtcbiAgICAgICAgdGV4dExhYmVsTGF5ZXJJbmRleGVzLnB1c2gobGF5ZXJJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkQ29sb3JGaWVsZCB8fCB1cGRhdGVUZXh0TGFiZWxcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICAuLi4odXBkYXRlZENvbG9yRmllbGQgPyB7Y29sb3JGaWVsZDogdXBkYXRlZENvbG9yRmllbGR9IDoge30pLFxuICAgICAgICAgICAgLi4uKHVwZGF0ZVRleHRMYWJlbCA/IHt0ZXh0TGFiZWx9IDoge30pXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllcjtcbiAgICB9KVxuICB9O1xuXG4gIGlmICh0ZXh0TGFiZWxMYXllckluZGV4ZXMubGVuZ3RoKSB7XG4gICAgLy8gTGFiZWwgYWNjZXNzb3JzIGFuZCBjaGFyYWN0ZXIgc2V0cyBhcmUgY2FjaGVkIGluIGxheWVyRGF0YS4gUmVidWlsZCB0aGVtXG4gICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlIG5ldyBmb3JtYXQgYXBwZWFycyB3aXRob3V0IHJlbW92aW5nIGFuZCByZS1hZGRpbmcgdGhlIGxhYmVsIGZpZWxkLlxuICAgIGNvbnN0IGxheWVycyA9IG5ld1N0YXRlLmxheWVycy5zbGljZSgpO1xuICAgIGNvbnN0IGxheWVyRGF0YSA9IG5ld1N0YXRlLmxheWVyRGF0YS5zbGljZSgpO1xuICAgIHRleHRMYWJlbExheWVySW5kZXhlcy5mb3JFYWNoKGxheWVySW5kZXggPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyc1tsYXllckluZGV4XSwgbmV3U3RhdGUsIGxheWVyRGF0YVtsYXllckluZGV4XSk7XG4gICAgICBsYXllcnNbbGF5ZXJJbmRleF0gPSByZXN1bHQubGF5ZXI7XG4gICAgICBsYXllckRhdGFbbGF5ZXJJbmRleF0gPSByZXN1bHQubGF5ZXJEYXRhO1xuICAgIH0pO1xuICAgIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBsYXllcnMsIGxheWVyRGF0YX07XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbnR5cGUgTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQgPSB7XG4gIGRhdGFzZXQ6IFZpc1N0YXRlWydkYXRhc2V0cyddW3N0cmluZ107XG4gIGZpZWxkOiBGaWVsZDtcbn07XG5cbmZ1bmN0aW9uIGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMgfCBudWxsKTogdW5rbm93bltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbHRlclByb3BzICYmICdtYXBwZWRWYWx1ZScgaW4gZmlsdGVyUHJvcHMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmlsdGVyUHJvcHMubWFwcGVkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24geWllbGRGb3JQYWludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3Moe2RhdGFzZXQsIGZpZWxkfTogTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQpIHtcbiAgLy8gWWllbGQgc28gdGhlIGRhdGEgdGFibGUgYW5kIHBlci1jb2x1bW4gbG9hZGluZyBzcGlubmVycyBjYW4gcGFpbnQgZmlyc3QuXG4gIGF3YWl0IHlpZWxkRm9yUGFpbnQoKTtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBmaWVsZC5maWx0ZXJQcm9wcyB8fCBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkLm5hbWUpO1xuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzKTtcbiAgY29uc3QgdmFsdWVzID0gbWFwcGVkVmFsdWUgPz8gY29sbGVjdENvbHVtblZhbHVlcyhkYXRhc2V0LmRhdGFDb250YWluZXIsIGZpZWxkLmZpZWxkSWR4KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Q29sdW1uU3RhdGlzdGljcyh7XG4gICAgdmFsdWVzLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcblxuICByZXR1cm4ge3Jlc3VsdCwgZmlsdGVyUHJvcHN9O1xufVxuXG5jb25zdCBMT0FEX0NPTFVNTl9TVEFUU19UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzLFxuICAnTE9BRF9DT0xVTU5fU1RBVFNfVEFTSydcbik7XG5cbi8qKlxuICogU3RhcnQgbG9hZGluZyBjb2x1bW4gc3RhdGlzdGljcyBmb3Igb25lIG9yIG1vcmUgZmllbGRzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmllbGROYW1lc1RvTG9hZCA9IHRvQXJyYXkoZmllbGROYW1lKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkc1RvTG9hZCA9IGRhdGFzZXQ/LmZpZWxkcy5maWx0ZXIoZiA9PiBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGYubmFtZSkpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGZpZWxkLm5hbWUpID8gey4uLmZpZWxkLCBpc0xvYWRpbmdTdGF0czogdHJ1ZX0gOiBmaWVsZFxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuXG4gIGNvbnN0IHRhc2tzID0gZmllbGRzVG9Mb2FkLm1hcChmID0+XG4gICAgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyh7ZGF0YXNldDogbmV3RGF0YXNldCwgZmllbGQ6IGZ9KS5iaW1hcChcbiAgICAgICh7cmVzdWx0LCBmaWx0ZXJQcm9wc30pID0+XG4gICAgICAgIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MobmV3RGF0YXNldC5pZCwgZi5uYW1lLCByZXN1bHQsIGZpbHRlclByb3BzLCB7XG4gICAgICAgICAgZmllbGRUeXBlOiBmLnR5cGVcbiAgICAgICAgfSksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PlxuICAgICAgICBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yLCB7XG4gICAgICAgICAgZmllbGRUeXBlOiBmLnR5cGVcbiAgICAgICAgfSlcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHJlc3VsdCxcbiAgICBmaWx0ZXJQcm9wcyxcbiAgICBkYXRhSWQsXG4gICAgZmllbGROYW1lLFxuICAgIGZpZWxkVHlwZVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCB8fCAoZmllbGRUeXBlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudHlwZSAhPT0gZmllbGRUeXBlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lLCBmaWVsZFR5cGV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQgfHwgKGZpZWxkVHlwZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnR5cGUgIT09IGZpZWxkVHlwZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuIFJhc3RlciB0aWxlcyBkb3dubG9hZCBhIFBORyBjbGlwIGFuZCBhXG4gKiBHZW9KU09OIHNpZGVjYXIgKGJib3ggcmVjdGFuZ2xlICsgc3RhdHMpIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBkYXRhc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2xheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuRXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmVhdHVyZSA9IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXI/LmNvbmZpZy5kYXRhSWQ7XG4gIGxldCBkYXRhc2V0ID0gZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IG51bGw7XG5cbiAgaWYgKCFsYXllciB8fCAhZGF0YXNldCB8fCAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaXNUaWxlZEV4dHJhY3QgPSBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpIHx8IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcik7XG5cbiAgLy8gR1BVIHJhbmdlL3RpbWUgZmlsdGVycyBhcmUgbm90IHJlZmxlY3RlZCBpbiBmaWx0ZXJlZEluZGV4OyBldmFsdWF0ZSB0aGVtIG9uIENQVVxuICAvLyB0aGUgc2FtZSB3YXkgZXhwb3J0IGRhdGEgZG9lcywgdGhlbiBjbGlwIHRoZSByZXN1bHQgdG8gdGhlIGRyYXdpbmcuXG4gIGlmICghaXNUaWxlZEV4dHJhY3QpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCByYXN0ZXIgcGl4ZWxzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgY29uc3QgcG9seWdvbiA9IGZlYXR1cmU7XG4gICAgY29uc3QgZG93bmxvYWQgPVxuICAgICAgdHlwZW9mIChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFByb21pc2UucmVzb2x2ZSgobGF5ZXIgYXMgYW55KS5kb3dubG9hZENsaXAocG9seWdvbikpXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHtwbmc6IGZhbHNlLCBqc29uOiBmYWxzZX0pO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgVU5XUkFQX1RBU0soZG93bmxvYWQpLmJpbWFwKFxuICAgICAgICAocmVzdWx0OiB7cG5nPzogYm9vbGVhbn0gfCBudWxsKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHJlc3VsdD8ucG5nXG4gICAgICAgICAgICAgID8gc3VjY2Vzc05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRG93bmxvYWRlZCByYXN0ZXIgY2xpcCBpbWFnZSBhbmQgc3RhdHMgZmlsZScsXG4gICAgICAgICAgICAgICAgICBpZDogJ2V4dHJhY3QtcmFzdGVyLWNsaXAnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwIGltYWdlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgIGVyciA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBkb3dubG9hZCByYXN0ZXIgY2xpcDogJHtcbiAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4obmV4dFZhbHVlID09PSAwICYmXG4gICAgKE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fSkubGVuZ3RoIHx8XG4gICAgICBPYmplY3Qua2V5cyhzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyB8fCB7fSkubGVuZ3RoKVxuICAgICAgPyB7bG9hZGluZ1Byb2dyZXNzOiB7fSwgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9fVxuICAgICAgOiB7fSlcbiAgfTtcbn07XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgaHlkcmF0ZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcGVyY2VudCwgcGhhc2V9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHBoYXNlID09PSAncHJvY2Vzc2luZyc7XG4gIGlmIChcbiAgICBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3M/LltpZF0gPT09IG5leHRQZXJjZW50ICYmXG4gICAgQm9vbGVhbihzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZz8uW2lkXSkgPT09IHByb2Nlc3NpbmdcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ1Byb2dyZXNzOiB7XG4gICAgICAuLi5zdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICBbaWRdOiBuZXh0UGVyY2VudFxuICAgIH0sXG4gICAgLi4uKHByb2Nlc3NpbmdcbiAgICAgID8ge1xuICAgICAgICAgIGxvYWRpbmdQcm9jZXNzaW5nOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyxcbiAgICAgICAgICAgIFtpZF06IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDoge30pXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBwbG90QmFzZUluZGV4QnlEYXRhSWQgPSBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQoc3RhdGUuZGF0YXNldHMsIGZpbHRlciwgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKFxuICAgIGZpbHRlcixcbiAgICB1cGRhdGVkUGxvdFR5cGUsXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgdW5kZWZpbmVkLFxuICAgIHBsb3RCYXNlSW5kZXhCeURhdGFJZFxuICApO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyLCBwbG90QmFzZUluZGV4QnlEYXRhSWQpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nLFxuICBvcHRpb25zOiB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0PzogYm9vbGVhbn0gPSB7fVxuKTogVCB7XG4gIC8vIFRoZSBzYW1lIGlkIG1lYW5zIHRoZSBuZXcgdGFibGUgb2NjdXBpZXMgdGhlIG9sZCBzbG90LCBzbyB0aGUgcHJldmlvdXMgcm93cyBoYXZlIHRvIGdvLlxuICBjb25zdCBkZWxldGVPcmlnaW5hbERhdGFzZXQgPSBvcHRpb25zLmRlbGV0ZU9yaWdpbmFsRGF0YXNldCAhPT0gZmFsc2UgfHwgZGF0YUlkID09PSBkYXRhSWRUb1VzZTtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBpZl8oZGVsZXRlT3JpZ2luYWxEYXRhc2V0LCBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nLFxuICBvcHRpb25zOiB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0PzogYm9vbGVhbn0gPSB7fVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBkZWxldGVPcmlnaW5hbERhdGFzZXQgPSBvcHRpb25zLmRlbGV0ZU9yaWdpbmFsRGF0YXNldCAhPT0gZmFsc2UgfHwgZGF0YUlkID09PSBkYXRhSWRUb1VzZTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlLCB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0fSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIFdoZW4gdGhlIG9yaWdpbmFsIHRhYmxlIHN0YXlzLCB0aGUgcmVwbGFjZW1lbnQgdGFrZXMgaXRzIHBsYWNlIGFuZCB0aGUgb3JpZ2luYWwgZm9sbG93cyBpdC5cbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLmZsYXRNYXAoZCA9PiB7XG4gICAgaWYgKGQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIFtkXTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA/IFtkYXRhSWRUb1VzZV0gOiBbZGF0YUlkVG9Vc2UsIGRdO1xuICB9KTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3JkZXIgdG8gcHJlc2VydmUgZm9yIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgbWVyZ2VkIGJhY2suXG4gKlxuICogYGlkc2AgY29tZXMgZnJvbSB0aGUgc2VyaWFsaXplZCBzdGF0ZSwgc28gaXQgbGlzdHMgZXZlcnl0aGluZyBidXQgdGhlIGl0ZW1zXG4gKiBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvOiBhbiBhcHAgcmVmcmVzaGluZyBzZXZlcmFsXG4gKiBkYXRhc2V0cyBpbiBhIHJvdyBwcmVwYXJlcyB0aGUgc2Vjb25kIHJlcGxhY2VtZW50IGJlZm9yZSB0aGUgZmlyc3Qgb25lJ3NcbiAqIGl0ZW1zIGhhdmUgbWVyZ2VkIGJhY2suIFdyaXRpbmcgYGlkc2AgYXMgaXQgaXMgd291bGQgZHJvcCB0aG9zZSwgYW5kXG4gKiBgaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcmAgcHV0cyBhbiBpdGVtIGl0IGNhbm5vdCBwbGFjZSBhdCB0aGUgZnJvbnQg4oCUXG4gKiBzbyB0aGV5IHdvdWxkIGNvbWUgYmFjayByZXZlcnNlZC4gV2hlcmUgdGhleSBiZWxvbmcgaXMgd2hhdCB0aGUgb3JkZXIgd3JpdHRlblxuICogd2hlbiB0aGV5IHdlcmUgcGFya2VkIGFscmVhZHkgc2F5cywgc28gdGhhdCBvcmRlciBpcyBrZXB0IGZvciB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICBwcmV2aW91c09yZGVyOiBzdHJpbmdbXSA9IFtdLFxuICBpZHM6IHN0cmluZ1tdLFxuICBwYXJrZWQ6IHtpZD86IHN0cmluZ31bXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJrZWRJZHMgPSBwYXJrZWRcbiAgICAubWFwKGl0ZW0gPT4gaXRlbT8uaWQpXG4gICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgIWlkcy5pbmNsdWRlcyhpZCBhcyBzdHJpbmcpKTtcblxuICBpZiAoIXBhcmtlZElkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgY29uc3Qga25vd24gPSBuZXcgU2V0KFsuLi5pZHMsIC4uLnBhcmtlZElkc10pO1xuICBjb25zdCBvcmRlcmVkID0gKHByZXZpb3VzT3JkZXIgfHwgW10pLmZpbHRlcihpZCA9PiBrbm93bi5oYXMoaWQpKTtcbiAgY29uc3QgcmVzdCA9IFsuLi5pZHMsIC4uLnBhcmtlZElkc10uZmlsdGVyKGlkID0+ICFvcmRlcmVkLmluY2x1ZGVzKGlkKSk7XG5cbiAgcmV0dXJuIFsuLi5vcmRlcmVkLCAuLi5yZXN0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2hhdCBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvIGFuZCBoYXMgbm90XG4gICAgICAgIC8vIG1lcmdlZCBiYWNrIHlldCwgcmVhZCBiZWZvcmUgdGhpcyBvbmUgcGFya3MgYW55dGhpbmcgb2YgaXRzIG93bi5cbiAgICAgICAgY29uc3QgcGFya2VkRWxzZXdoZXJlID1cbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdG9BcnJheShyZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdID8/IFtdKVxuICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0sXG4gICAgICAgICAgICBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCksXG4gICAgICAgICAgICBwYXJrZWRFbHNld2hlcmVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuY29uc3QgREFUQVNFVF9PUF9BRERfT1BUSU9OUyA9IHtcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgY2VudGVyTWFwOiBmYWxzZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQoc3RhdGU6IFZpc1N0YXRlLCBwcm90bzogUHJvdG9EYXRhc2V0KTogVmlzU3RhdGUge1xuICBjb25zdCByZXN1bHRJZCA9IHByb3RvLmluZm8uaWQ7XG4gIGlmICghcmVzdWx0SWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKHN0YXRlLmRhdGFzZXRzW3Jlc3VsdElkXSkge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiByZXN1bHRJZCwgZGF0YTogcHJvdG8uZGF0YX0pO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gbmV4dFN0YXRlLmRhdGFzZXRzW3Jlc3VsdElkXTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgIH1cbiAgICBleGlzdGluZy5tZXRhZGF0YSA9IHtcbiAgICAgIC4uLmV4aXN0aW5nLm1ldGFkYXRhLFxuICAgICAgLi4ucHJvdG8ubWV0YWRhdGFcbiAgICB9O1xuICAgIGV4aXN0aW5nLmxhYmVsID0gcHJvdG8uaW5mby5sYWJlbCB8fCBleGlzdGluZy5sYWJlbDtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFzZXRzOiBwcm90byxcbiAgICBvcHRpb25zOiBEQVRBU0VUX09QX0FERF9PUFRJT05TXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuR3JvdXBCeVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuR3JvdXBCeVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVHcm91cEJ5KHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Kb2luVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5Kb2luVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZUpvaW4oc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blNwYXRpYWxKb2luVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5TcGF0aWFsSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVTcGF0aWFsSm9pbihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuU3VpdGFiaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blN1aXRhYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZVN1aXRhYmlsaXR5KHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXJcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsSUFBSSxRQUFPLFlBQVk7QUFFL0IsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUFRQyxPQUFPLElBQUlDLE9BQU8sUUFBTyxlQUFlO0FBQ2hELE9BQU9DLFNBQVMsTUFBTSw2QkFBNkI7QUFDbkQsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxPQUFPLE1BQU0sMkJBQTJCO0FBQy9DLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxHQUFHLE1BQU0sdUJBQXVCO0FBQ3ZDLE9BQU9DLElBQUksSUFBR0MscUJBQXFCLEVBQUVDLFFBQVEsUUFBTyxrQkFBa0I7QUFFdEU7QUFDQSxTQUNFQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsV0FBVyxRQUNOLGtCQUFrQjtBQUN6QjtBQUNBLFNBQ0VDLGVBQWUsRUFNZkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsRUFDdkJDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxvQkFBb0IsRUFDcEJDLDhCQUE4QixFQUM5QkMsbUJBQW1CLEVBQ25CQyxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsWUFBWSxFQUNaQyx1QkFB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
|
|
6414
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiRVhQQU5EX1pJUF9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJuZXh0RmlsZUJhdGNoIiwic2V0RmlsdGVyIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiZml0Qm91bmRzIiwiZml0TWFwQm91bmRzIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJhcHBseUZpbHRlckNvbmZpZyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJub3JtYWxpemVDYW1lcmFCb29rbWFya3MiLCJub3JtYWxpemVDYW1lcmFUb3VyIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJhcmVGaWx0ZXJGaWVsZFR5cGVzQ29tcGF0aWJsZSIsImRpc2FibGVHcHVJZkludmVydGVkIiwiZmlsdGVyVHlwZVVzZXNHcHUiLCJnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQiLCJlcnJvck5vdGlmaWNhdGlvbiIsInN1Y2Nlc3NOb3RpZmljYXRpb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsInRvU2tldGNoRmVhdHVyZSIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmlsdGVyRGF0YXNldENQVSIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsImdldERlZmF1bHRGaWx0ZXIiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImlzSW5SYW5nZSIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzUmdiQ29sb3IiLCJwYXJzZUZpZWxkVmFsdWUiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJzZXQiLCJ1cGRhdGVGaWx0ZXJQbG90IiwicmVtb3ZlRmlsdGVyUGxvdCIsImlzTGF5ZXJBbmltYXRhYmxlIiwiaXNTaWRlRmlsdGVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImdlbmVyYXRlSGFzaElkIiwidG9BcnJheSIsImFycmF5TW92ZSIsIkFMTF9GSUVMRF9UWVBFUyIsIkFOSU1BVElPTl9XSU5ET1ciLCJCQVNFX1NQRUVEIiwiQ09NUEFSRV9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkVESVRPUl9NT0RFUyIsIkZJTFRFUl9UWVBFUyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiTEFZRVJfVFlQRVMiLCJGUFMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwiUExPVF9UWVBFUyIsIlNPUlRfT1JERVIiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiQ0hBTk5FTF9TQ0FMRVMiLCJTQ0FMRV9UWVBFUyIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fUlVMRVJfTEVOR1RIX01FVEVSUyIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJHRU9DT0RFUl9EQVRBU0VUX05BTUUiLCJHRU9DT0RFUl9JQ09OX0NPTE9SIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsImlzUG9pbnRDb3VudExhYmVsIiwiTEFZRVJfSURfTEVOR1RIIiwiTGF5ZXIiLCJMYXllckNsYXNzZXMiLCJhcHBseV8iLCJjb21wb3NlXyIsImZpbHRlck91dEJ5SWQiLCJpZl8iLCJtZXJnZV8iLCJwYXlsb2FkXyIsInBpY2tfIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJzd2FwXyIsImlzVmFsaWRNZXJnZXIiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwicGFyc2VMYXllckNvbmZpZyIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplVmlzU3RhdGUiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJLZXBsZXJHTFNjaGVtYSIsImdldEZpbGVzVG9QYXJzZSIsImlzWmlwRmlsZU5hbWUiLCJsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQiLCJwcm9jZXNzR2VvanNvbiIsImFkZE1ldGVyc1RvTG5nTGF0IiwiYnVpbGRDaGFuZ2VDb2x1bW5UeXBlRGF0YSIsImZvcm1hdENvbHVtblR5cGVDb252ZXJzaW9uRXJyb3IiLCJhc3NpZ25HcHVDaGFubmVsIiwiYnVpbGREZWxldGVDb2x1bW5EYXRhIiwiYnVpbGRSZW5hbWVDb2x1bW5EYXRhIiwiY2FuTXV0YXRlRGF0YXNldFNjaGVtYSIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInBpblRhYmxlQ29sdW1ucyIsInNob3dBbGxUYWJsZUNvbHVtbnMiLCJ0b2dnbGVIaWRkZW5UYWJsZUNvbHVtbiIsInNldEZpbHRlckdwdU1vZGUiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicmVtYXBDaGFydHNGb3JEYXRhc2V0IiwiZmluZEZpZWxkc1RvU2hvdyIsImdldFpvb21PcGFjaXR5QW5ub3RhdGlvblRhcmdldElkIiwicmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkiLCJjYWxjdWxhdGVMYXllckRhdGEiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJnZXROZXdMYXllckdyb3VwIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJhZGRHcm91cEJ5VXBkYXRlciIsImFkZEpvaW5VcGRhdGVyIiwiYWRkU3BhdGlhbEpvaW5VcGRhdGVyIiwiYWRkU3VpdGFiaWxpdHlVcGRhdGVyIiwiZXhlY3V0ZUdyb3VwQnkiLCJleGVjdXRlSm9pbiIsImV4ZWN1dGVTcGF0aWFsSm9pbiIsImV4ZWN1dGVTdWl0YWJpbGl0eSIsInJlbW92ZURhdGFzZXRPcFVwZGF0ZXIiLCJyZW1vdmVPcHNGb3JEYXRhc2V0cyIsInNldEdyb3VwQnlDb25maWdVcGRhdGVyIiwic2V0Sm9pbkNvbmZpZ1VwZGF0ZXIiLCJzZXRTcGF0aWFsSm9pbkNvbmZpZ1VwZGF0ZXIiLCJzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXIiLCJmaXhFZmZlY3RPcmRlciIsImdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsIm1lcmdlVGltZURvbWFpbnMiLCJhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93IiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwibWVyZ2VQbG90R3JvdXBCeSIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJtZXJnZUZpbHRlckRvbWFpbiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwib3B0aW9uYWxNYXBUZXh0IiwiY3JlYXRlRWZmZWN0IiwiZmluZE1hcEJvdW5kcyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJBQlNPTFVURSIsImxlZ2VuZCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJjb2xvciIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJhbm5vdGF0aW9uIiwiem9vbU9wYWNpdHkiLCJjb250cm9sbGVycyIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsInVuZGVmaW5lZCIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwiZ3JvdXBCeXMiLCJqb2lucyIsInN1aXRhYmlsaXRpZXMiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJjaGFydHMiLCJjaGFydHNUb0JlTWVyZ2VkIiwiY2FtZXJhQm9va21hcmtzIiwiY2FtZXJhVG91ciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YWdlZFRvQWRkIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ1Byb2Nlc3NpbmciLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4Iiwic2F2ZWRMYXllckNvbmZpZyIsIm5ld1BhcnNlZExheWVyIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsImtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbCIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm5ld0xheWVySWQiLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwidmlzdWFsQ2hhbm5lbHMiLCJjaGFubmVsTmFtZSIsImNoYW5uZWwiLCJjaGFubmVsUHJvcE5hbWVzIiwicHJvcCIsInNvbWUiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZXJyIiwiZSIsImYiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ1cGRhdGVsYXllclZpc2liaWx0eSIsImZpbHRlckluZGV4IiwiZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2RlZmluZVByb3BlcnR5IiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJhcmd1bWVudHMiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImluZGV4IiwiaW5jbHVkZXMiLCJvdGhlciIsImRlbGV0ZUZpZWxkcyIsImZkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYWYiLCJfdGV4dExhYmVsJGZpbmQkY29sbGkiLCJfdGV4dExhYmVsJGZpbmQiLCJjb2xsaXNpb25FbmFibGVkIiwiQm9vbGVhbiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJfdGV4dExhYmVsJCIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsIm9sZExheWVyVHlwZSIsIm5ld0RhdGFzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZW1hcHBlZEZpZWxkcyIsInZhbHVlcyIsIl9yZWYyIiwiZmllbGRLZXkiLCJjdXJyZW50RmllbGQiLCJtYXRjaGVkIiwiX3JlZjMiLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJtYXliZUZpdE1hbnVhbExheWVyQm91bmRzIiwiZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllciIsImJvdW5kcyIsIm5ld1R5cGUiLCJvbGRJZCIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJoYXMiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIl90b1Byb3BlcnR5S2V5IiwicmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0IiwidmlzdWFsQ2hhbm5lbCIsImluY29taW5nIiwiX3R5cGVvZiIsImZvdW5kIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJjaGFubmVsU2NhbGVUeXBlIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiY2hhbm5lbEtleSIsImplbmtzIiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2IiwicCIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJwcmV2aW91c1dpbmRvdyIsIm5leHRGaWx0ZXIiLCJ0aW1lUmFuZ2UiLCJpbnRlcnZhbCIsImFkanVzdGVkIiwiZXZlcnkiLCJ2IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpbmRleE9mIiwibmV3U3luY1RpbWVsaW5lTW9kZSIsImdldFN5bmNBbmltYXRpb25Nb2RlIiwic2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIiLCJhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIiLCJfc2VyaWFsaXplRmlsdGVyIiwiZmlsdGVySWQiLCJuZXdGaWx0ZXIiLCJvbGRGaWx0ZXIiLCJzZXJpYWxpemVkT2xkRmlsdGVyIiwic2VyaWFsaXplZE5ld0ZpbHRlciIsInVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmciLCJhZmZlY3RlZERhdGFzZXRJZHMiLCJ1cGRhdGVkRmlsdGVySW5kZXgiLCJfZmlsdGVyJHBsb3RUeXBlIiwic2hvdWxkUmVmcmVzaE51bWVyaWNQbG90IiwicGxvdFR5cGUiLCJsaW5lQ2hhcnQiLCJzaGFyZWREYXRhc2V0SWRzIiwiaW52YWxpZGF0ZWRGaWx0ZXIiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsImN1cnJlbnREYXRhSWQiLCJmaWVsZE5hbWUiLCJlbmRGaWVsZE5hbWUiLCJlbmROYW1lIiwicHJldmlvdXNWYWx1ZSIsIm5leHREYXRhSWRzIiwiX2kiLCJfYXJyIiwibmV4dENoYW5uZWxzIiwiY2FuZGlkYXRlIiwiY2FuUmViaW5kRmllbGQiLCJmaWVsZFR5cGUiLCJfcmVmNiIsIm1lcmdlRG9tYWluIiwicmVib3VuZEZpbHRlciIsIm5leHROYW1lcyIsIm5leHRGaWVsZElkeCIsImZpZWxkSWR4IiwiZ3B1IiwiX2FwcGx5VGltZUZpbHRlckVuZEZpIiwicmVib3VuZEVuZEZpbHRlciIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaTIiLCJjbGVhcmVkRW5kRmlsdGVyIiwiZG9tYWluU3RlcHMiLCJzdGVwIiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsIl9pMiIsIl9hcnIyIiwibmV4dFZhbCIsImRhdGFzZXRJZHMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaTMiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsInN1cHBvcnRzSW52ZXJzaW9uIiwiX3N0YXRlJGRhdGFzZXRzJGRhdGFzIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJpbnZlcnRlZCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjciLCJfbmV3RmlsdGVyJHBsb3RUeXBlIiwiX25ld0ZpbHRlciRwbG90VHlwZTMiLCJuZXdQcm9wIiwicHJldmlvdXNOdW1lcmljSW50ZXJ2YWwiLCJudW1lcmljSW50ZXJ2YWwiLCJwbG90VHlwZVVwZGF0ZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUyIiwiZ3JvdXBCeSIsImNoYXJ0VHlwZSIsInlBeGlzIiwiaGlzdG9ncmFtIiwibnVtZXJpY0ludGVydmFsQ2hhbmdlZCIsImJpbnMiLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmOCIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOSIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3Iiwib3BlbmVkRmlsdGVyIiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjAiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMTAiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsInBhcmVudEdyb3VwIiwibGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQiLCJpZHhJbkdyb3VwIiwidXBkYXRlZEdyb3VwIiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiX2FjdGlvbiRjb25maWcyIiwiX2FjdGlvbiRjb25maWczIiwiZWZmZWN0IiwibmV3RWZmZWN0Iiwic2V0UHJvcHMiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMyIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV4dFBhcmFtcyIsInBhcmFtZXRlcnMiLCJ0aW1lc3RhbXAiLCJuZXdFZmZlY3RzIiwibWVyZ2VDaGFydENvbmZpZyIsImRpc3BsYXkiLCJjaGFydERpc3BsYXkiLCJheGlzRmllbGRJZlByZXNlbnQiLCJheGlzIiwiZmllbGROYW1lcyIsIl9heGlzJGZpZWxkIiwiZHJvcE1pc3NpbmdDaGFydEZpZWxkcyIsIlNldCIsInhBeGlzIiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxNCIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJpc0pzb25FZGl0b3JBY3RpdmUiLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTYiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNyIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTgiLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsInByb3ZpZGVkQW5nbGUiLCJhbmdsZSIsImRlcml2ZWRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIlRFWFQiLCJSVUxFUiIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImVkaXRvclN0YXRlIiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiX2VuZFBvaW50IiwiX3Nob3dDdXN0b21UZXh0IiwiX3Nob3dEaXN0YW5jZSIsInNoaWZ0ZWQiLCJhbHRpdHVkZSIsImRlZmF1bHRFbmRQb2ludCIsImVuZFBvaW50Iiwic2hvd0N1c3RvbVRleHQiLCJzaG93RGlzdGFuY2UiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOSIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMCIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjIiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwicmVtb3ZlU2luZ2xlRGF0YXNldFVwZGF0ZXIiLCJfc3RhdGUkZGF0YXNldHMiLCJfZGF0YXNldCIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjMiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJzZXRDYW1lcmFCb29rbWFya3NVcGRhdGVyIiwicGF5bG9hZCIsInNldENhbWVyYVRvdXJVcGRhdGVyIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjQiLCJfcmVmMjQkcGF5bG9hZCIsIl9yZWYyNCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyNCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwiZ2VvY29kZXJMYXllciIsIl9jb25maWckY29uZmlnJGNvbG9yIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI1IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjYiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNyIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyOCIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwicGhhc2UiLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsImNsZWFyTG9hZGluZ1Byb2dyZXNzIiwiaWRzIiwiY3VycmVudCIsInByb2Nlc3NpbmciLCJuZXh0UHJvY2Vzc2luZyIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyOSIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjMwIiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJjc3ZIZWFkZXIiLCJfcHJvZ3Jlc3MkcGVyY2VudDIiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjMxIiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwiX2RhdGFzZXQkbWV0YWRhdGE2IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzIiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJwb2x5Z29uIiwicmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEiLCJuZWVkc0dlb21ldHJ5IiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzRGF0YXNldFJvd0xpc3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYzMyIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjM0Iiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjM1IiwiU3RyaW5nIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJyZWFkeVRhc2tzIiwicmVtb3RlVGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsImh5ZHJhdGVQcm9ncmVzcyIsIl9yZWYzNiIsImRhdGFzZXRJbmRleCIsIl9yZWYzNiRpbmZvIiwicmVzdCIsIl9leGNsdWRlZDIiLCJwcm90byIsInJlbW90ZSIsInByb2dyZXNzSWRzIiwiYmF0Y2hlcyIsInRhc2tzIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJjaGFuZ2UiLCJiYXRjaCIsImJhdGNoSW5kZXgiLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsIm9uRmluaXNoIiwiYWRkVG9NYXBPcHRpb25zIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX3JlZjM3IiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwiX2xheWVyJGNvbmZpZyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5IiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzgiLCJfcmVmMzkiLCJja2V5IiwiY29sIiwiX3JlZjQwIiwiZmllbGRDb25maWciLCJfdGwkZmllbGQiLCJfdGwkZmllbGQyIiwiX3JlbmFtZXMkbmFtZSIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsIkZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUyIsImludGVnZXIiLCJyZWFsIiwiY2xlYXJUaW1lbGluZUZpbHRlclN0YXRlIiwiX3JlZjQxIiwiX3N5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwiX3N5bmNUaW1lbGluZU1vZGUiLCJzeW5jVGltZWxpbmVNb2RlIiwiX3RpbWVCaW5zIiwidGltZUJpbnMiLCJfbGluZUNoYXJ0IiwiX3RpbWV6b25lIiwiX2ludmVydFRyZW5kQ29sb3IiLCJpbnZlcnRUcmVuZENvbG9yIiwiX3Nob3dUaW1lRGlzcGxheSIsInNob3dUaW1lRGlzcGxheSIsIl9leGNsdWRlZDMiLCJmaXhlZERvbWFpbiIsImZyZWUiLCJyZWNvbmNpbGVUaW1lbGluZVBsb3RBZnRlclByaW1hcnlSZW1vdmFsIiwiX2ZpbHRlciR5QXhpcyIsIl9wcmltYXJ5RGF0YXNldCRmaWVsZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwicHJpbWFyeURhdGFzZXQiLCJfZmlsdGVyJHlBeGlzMiIsImdyb3VwQnlGaWVsZE5hbWUiLCJoYXNHcm91cEJ5RmllbGQiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9yZW5hbWVzJHNvcnRlZENvbHVtbiIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJfcmVmNDIiLCJzb3J0Q29sdW1uIiwiX3JlZjQzIiwic29ydGVkQ29sdW1uIiwic29ydE1vZGUiLCJ1cGRhdGVTY2hlbWEiLCJkYXRhUmV2aXNpb24iLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0T3JkZXIiLCJuZXdGaWVsZHNCeU5hbWUiLCJNYXAiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZTIiLCJoaWRkZW5Db2x1bW5zIiwiX3JlbmFtZXMkbmFtZTMiLCJuZXh0U29ydGVkQ29sdW1uIiwiZGF0YXNldElkc1RvUmVmaWx0ZXIiLCJfcmVuYW1lcyRvbGROYW1lIiwiX25ld1RhYmxlJGdldENvbHVtbkZpIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXh0RmlsdGVyVHlwZSIsImdldENvbHVtbkZpbHRlclByb3BzIiwiYWRkIiwiZGV0YWNoZWRGaWx0ZXIiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImxlYXZpbmdUaW1lRmlsdGVyIiwib2xkRW5kTmFtZSIsIl9yZW5hbWVzJG9sZEVuZE5hbWUiLCJfcmVmNDQiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmk0IiwiX3JlbmFtZXMkdXBkYXRlZCR5QXhpIiwieUF4aXNOYW1lIiwieUF4aXNGaWVsZCIsInJlY29uY2lsZWQiLCJyZW1vdmVkTGF5ZXJJZHMiLCJfZmlsdGVyJGxheWVySWQyIiwic3Vydml2aW5nTGF5ZXJzIiwiZnJvbSIsIm5leHRGaWVsZHNUb1Nob3ciLCJfcmVuYW1lcyRmJG5hbWUiLCJyZW5hbWVUYWJsZUNvbHVtblVwZGF0ZXIiLCJjaGFuZ2VUYWJsZUNvbHVtblR5cGVVcGRhdGVyIiwiZGVsZXRlVGFibGVDb2x1bW5VcGRhdGVyIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibmV4dEZpbGVMb2FkSWQiLCJjcmVhdGVGaWxlTG9hZElkIiwibG9hZElkIiwiZmluaXNoRmlsZUxvYWQiLCJmaWxlQ2FjaGUiLCJsb2FkRmlsZXNVcGRhdGVyIiwiX3N0YXRlJGZpbGVMb2FkaW5nJG9wIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwiY29tcGFuaW9uRmlsZXMiLCJmaWxlc1RvTG9hZCIsImRlZmVyQWRkVG9NYXAiLCJhcHBlbmREZWZlcnJlZEZpbGVMb2FkIiwicHJldmlvdXNFcnJvcnMiLCJmcm9tRW50cmllcyIsIl9yZWY0NSIsIl9yZWY0NiIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZE5leHRGaWxlVXBkYXRlciIsIl9yZWY0NyIsImxvYWRpbmciLCJmaWxlIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsImN1cnJlbnRMb2FkSWQiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheSIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwiZXh0ZW5zaW9ucyIsImRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMiLCJleHBhbnNpb24iLCJhcmNoaXZlTmFtZSIsIm1ha2VMb2FkRmlsZVRhc2siLCJzZWVuIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImxvYWRlciIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJleHRlbnNpb24iLCJleHQiLCJyZXBsYWNlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlIiwiZXh0cmFjdGVkIiwic2hhcGVmaWxlIiwiY29tcGFuaW9ucyIsIndpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkiLCJleHBhbmRaaXBBcmNoaXZlU3VjY2Vzc1VwZGF0ZXIiLCJhZGREYXRhT3B0aW9ucyIsImRpc3BsYXlOYW1lIiwiZ2VuIiwiY29udGVudCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwicHJlcGFyZVByb2dyZXNzaXZlUmVwbGF5IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWY0OCIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjQ4JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIl9yZWY0OSIsImNsZWFyU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWY1MCIsImVycm9yTG9hZElkIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjUxIiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJtZXJnZWQiLCJfcmVmNTMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY1NCIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY1NSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNTUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjU2IiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTciLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQzIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjU5IiwiY29sdW1uIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNjAiLCJ0b2dnbGVUYWJsZUNvbHVtbkhpZGRlblVwZGF0ZXIiLCJfcmVmNjEiLCJzaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlciIsIl9yZWY2MiIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNjMiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInZhbHVlQXQiLCJqb2luIiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmNjQiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsInRleHRMYWJlbExheWVySW5kZXhlcyIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsInVwZGF0ZWRDb2xvckZpZWxkIiwidXBkYXRlVGV4dExhYmVsIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94NCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlNCIsIl9yZWY2NSIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjY2IiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwiX3JlZjY3IiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNjgiLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjY5IiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY3MCIsImlzVGlsZWRFeHRyYWN0Iiwicm93Q291bnQiLCJkb3dubG9hZCIsImRvd25sb2FkQ2xpcCIsInBuZyIsImpzb24iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY3MSIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNzIiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjczIiwic2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsIl9yZWY3NCIsIl9zdGF0ZSRsb2FkaW5nUHJvZ3JlcyIsIl9zdGF0ZSRsb2FkaW5nUHJvY2VzcyIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJsYXllclRpbWVJbnRlcnZhbCIsInVwZGF0ZWRQbG90VHlwZSIsInBsb3RCYXNlSW5kZXhCeURhdGFJZCIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNzYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNzciLCJhY2N1U3RhdGUiLCJfcmVmNzgiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNzkiLCJjaGlsZERhdGFJZCIsIkRBVEFTRVRfT1BfQUREX09QVElPTlMiLCJhcHBseURlcml2ZWRQcm90b0RhdGFzZXQiLCJyZXN1bHRJZCIsInJ1bkdyb3VwQnlVcGRhdGVyIiwiX2V4ZWN1dGVHcm91cEJ5IiwicnVuSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZUpvaW4iLCJydW5TcGF0aWFsSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZVNwYXRpYWxKb2luIiwicnVuU3VpdGFiaWxpdHlVcGRhdGVyIiwiX2V4ZWN1dGVTdWl0YWJpbGl0eSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBFWFBBTkRfWklQX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBleHBhbmRaaXBBcmNoaXZlU3VjY2VzcyxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MsXG4gIHNldExvYWRpbmdQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIG5vcm1hbGl6ZUNhbWVyYUJvb2ttYXJrcyxcbiAgbm9ybWFsaXplQ2FtZXJhVG91cixcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBhcmVGaWx0ZXJGaWVsZFR5cGVzQ29tcGF0aWJsZSxcbiAgZGlzYWJsZUdwdUlmSW52ZXJ0ZWQsXG4gIGZpbHRlclR5cGVVc2VzR3B1LFxuICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQsXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBzdWNjZXNzTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fUlVMRVJfTEVOR1RIX01FVEVSUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04sXG4gIEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5ULFxuICB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0LFxuICBHRU9DT0RFUl9EQVRBU0VUX05BTUUsXG4gIEdFT0NPREVSX0lDT05fQ09MT1IsXG4gIEdFT0NPREVSX0xBWUVSX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLFxuICBpc1BvaW50Q291bnRMYWJlbCxcbiAgTEFZRVJfSURfTEVOR1RILFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIGlmXyxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgaXNTYXZlZExheWVyQ29uZmlnVjEsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge1xuICBnZXRGaWxlc1RvUGFyc2UsXG4gIGlzWmlwRmlsZU5hbWUsXG4gIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCxcbiAgcHJvY2Vzc0dlb2pzb24sXG4gIHR5cGUgRmlsZUNhY2hlSXRlbSxcbiAgWmlwQXJjaGl2ZUV4cGFuc2lvblxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFJhbmdlRmlsdGVyLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldCxcbiAgQ2hhcnRDb25maWcsXG4gIExheWVyQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcbmltcG9ydCB7YWRkTWV0ZXJzVG9MbmdMYXR9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGJ1aWxkQ2hhbmdlQ29sdW1uVHlwZURhdGEsXG4gIGZvcm1hdENvbHVtblR5cGVDb252ZXJzaW9uRXJyb3IsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGJ1aWxkRGVsZXRlQ29sdW1uRGF0YSxcbiAgYnVpbGRSZW5hbWVDb2x1bW5EYXRhLFxuICBjYW5NdXRhdGVEYXRhc2V0U2NoZW1hLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzaG93QWxsVGFibGVDb2x1bW5zLFxuICB0b2dnbGVIaWRkZW5UYWJsZUNvbHVtbixcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7cmVtYXBDaGFydHNGb3JEYXRhc2V0fSBmcm9tICcuL2NvbHVtbi1lZGl0LXJlY29uY2lsZSc7XG5pbXBvcnQge1xuICBmaW5kRmllbGRzVG9TaG93LFxuICBnZXRab29tT3BhY2l0eUFubm90YXRpb25UYXJnZXRJZCxcbiAgcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHlcbn0gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIGFkZFN1aXRhYmlsaXR5VXBkYXRlcixcbiAgZXhlY3V0ZUdyb3VwQnksXG4gIGV4ZWN1dGVKb2luLFxuICBleGVjdXRlU3BhdGlhbEpvaW4sXG4gIGV4ZWN1dGVTdWl0YWJpbGl0eSxcbiAgcmVtb3ZlRGF0YXNldE9wVXBkYXRlcixcbiAgcmVtb3ZlT3BzRm9yRGF0YXNldHMsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi9kYXRhc2V0LW9wcy11cGRhdGVycyc7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgbWVyZ2VQbG90R3JvdXBCeSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3MsXG4gIG9wdGlvbmFsTWFwVGV4dFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyBkaXNhYmxlIHN0YWNrIGNhcHR1cmUgZm9yIHdpdGhUYXNrIGNhbGxzIHRoYXQgaGFwcGVuIG91dHNpZGUgc3RyaWN0IHJlZHVjZXIgY29udGV4dFxuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgdGltZXpvbmU6IG51bGwsXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgbGVnZW5kOiB7XG4gICAgaWQ6ICdsZWdlbmQnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmxlZ2VuZCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBoaWRlSW52aXNpYmxlTGF5ZXJzOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2UsXG4gICAgICBjb2xvcjogR0VPQ09ERVJfSUNPTl9DT0xPUlxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAyLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGFubm90YXRpb246IHtcbiAgICBpZDogJ2Fubm90YXRpb24nLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmFubm90YXRpb24nLFxuICAgIGVuYWJsZWQ6IGZhbHNlXG4gIH0sXG4gIHpvb21PcGFjaXR5OiB7XG4gICAgaWQ6ICd6b29tT3BhY2l0eScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZmFkZU9uWm9vbScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBjb250cm9sbGVyczogW11cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICBkZXNjcmlwdGlvbjogdW5kZWZpbmVkXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuICBncm91cEJ5czogW10sXG4gIGpvaW5zOiBbXSxcbiAgc3VpdGFiaWxpdGllczogW10sXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gY2FtZXJhIGJvb2ttYXJrc1xuICBjYW1lcmFCb29rbWFya3M6IFtdLFxuICBjYW1lcmFUb3VyOiBudWxsLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGwsXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9LFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IHNhdmVkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gc2F2ZWRMYXllckNvbmZpZ1xuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKVxuICAgIDogbmV3TGF5ZXJDb25maWc7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzLCB7XG4gICAga2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiBzYXZlZExheWVyQ29uZmlnXG4gIH0pO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKFxuICAgIChmaWVsZCwgaW5kZXgpID0+XG4gICAgICBmaWVsZCAmJlxuICAgICAgZmllbGQubmFtZSAmJlxuICAgICAgIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSkgJiZcbiAgICAgIG5ld0ZpZWxkcy5maW5kSW5kZXgob3RoZXIgPT4gb3RoZXIgJiYgb3RoZXIubmFtZSA9PT0gZmllbGQubmFtZSkgPT09IGluZGV4XG4gICk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgLy8gQWdncmVnYXRpb24gZGVmYXVsdHMgYWxyZWFkeSBuYW1lIFBvaW50IENvdW50LiBVc2luZyB0aGF0IG9iamVjdCBhcyB0aGVcbiAgLy8gZW1wdHkgcGxhY2Vob2xkZXIsIHRoZW4gYXBwZW5kaW5nIHRoZSBmaWVsZCBqdXN0IHBpY2tlZCwgaW5zZXJ0cyB0aGUgc2FtZVxuICAvLyBsYWJlbCB0d2ljZS4gZGVjay5nbCB0aGVuIHJlamVjdHMgdGhlIGR1cGxpY2F0ZSBjb2xsaXNpb24gbGF5ZXIgaWRzLlxuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFt7Li4uZGVmYXVsdFRleHRMYWJlbCwgZmllbGQ6IG51bGx9XSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgLy8gVGhlIHNsb3QgaXMgZW1wdHkgdW50aWwgYSBmaWVsZCBpcyBwaWNrZWQuIEFnZ3JlZ2F0aW9uIGRlZmF1bHRzIGFscmVhZHlcbiAgICAgICAgLy8gY2FycnkgUG9pbnQgQ291bnQsIGFuZCBjb3B5aW5nIHRoYXQgZmllbGQgd291bGQgYWRkIGEgc2Vjb25kIGxhYmVsLlxuICAgICAgICBmaWVsZDogbnVsbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBGaXQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciB0eXBlIGRyb3Bkb3duIGdpdmVzIGFuIGVtcHR5IGxheWVyIGl0cyBmaXJzdFxuICogdHlwZSBhbmQgdGhhdCBsYXllciBhbHJlYWR5IHBvaW50cyBhdCBhIGRhdGFzZXQuIExhdGVyIHR5cGUgY2hhbmdlcyxcbiAqIHByb2dyYW1tYXRpYyBgbGF5ZXJUeXBlQ2hhbmdlYCwgYW5kIHNhdmVkLWNvbmZpZyBhcHBsaWVzIGxlYXZlIHRoZSBjYW1lcmFcbiAqIGFsb25lLiBHYXRlZCBieSBgZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllcmAuXG4gKi9cbmZ1bmN0aW9uIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBsYXllcjogTGF5ZXIsXG4gIGZpdEJvdW5kcz86IGJvb2xlYW5cbik6IFZpc1N0YXRlIHtcbiAgaWYgKFxuICAgICFmaXRCb3VuZHMgfHxcbiAgICBvbGRMYXllci50eXBlIHx8XG4gICAgIWxheWVyLmNvbmZpZy5kYXRhSWQgfHxcbiAgICAhZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKFtsYXllcl0pO1xuICBpZiAoIWJvdW5kcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGUsXG4gICAgQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiBmaXRNYXBCb3VuZHMoYm91bmRzKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgaWYgKCFBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobmV3VHlwZSkpIHtcbiAgICAgIGNvbnN0IHRleHRMYWJlbCA9IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwuZmlsdGVyKGxhYmVsID0+ICFpc1BvaW50Q291bnRMYWJlbChsYWJlbCkpO1xuICAgICAgaWYgKHRleHRMYWJlbC5sZW5ndGggIT09IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICB0ZXh0TGFiZWw6IHRleHRMYWJlbC5sZW5ndGggPyB0ZXh0TGFiZWwgOiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBtYXliZUZpdE1hbnVhbExheWVyQm91bmRzKG5ld1N0YXRlLCBvbGRMYXllciwgbGF5ZXIsIGFjdGlvbi5maXRCb3VuZHMpO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIC8vIEplbmtzIGJyZWFrcyBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBjb2xvcnMuIFJlY2FsY3VsYXRlIHRoZSBkb21haW4gd2hlblxuICAvLyB0aGUgY29sb3IgcmFuZ2Ugb2YgYSBKZW5rcyBjaGFubmVsIGNoYW5nZXMuXG4gIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICBPYmplY3Qua2V5cyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IG5ld0xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbm5lbD8uc2NhbGUgJiZcbiAgICAgICAgICBuZXdMYXllci5jb25maWdbY2hhbm5lbC5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmplbmtzICYmXG4gICAgICAgICAgY2hhbm5lbC5yYW5nZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24ubmV3VmlzQ29uZmlnLCBjaGFubmVsLnJhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgY29uc3QgdXBkYXRlZFN0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICAgIHJldHVybiBuZXdMYXllci50eXBlID09PSAnemFycicgJiYgcHJvcHMuc29tZShwID0+IHAgPT09ICd6YXJyQXhpcycgfHwgcCA9PT0gJ3phcnJWYXJpYWJsZScpXG4gICAgICA/IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1dpbmRvdyA9IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5hbmltYXRpb25XaW5kb3c7XG4gIGxldCBuZXh0RmlsdGVyID0gey4uLmZpbHRlciwgYW5pbWF0aW9uV2luZG93fSBhcyBGaWx0ZXI7XG5cbiAgLy8gRW50ZXJpbmcgb3IgbGVhdmluZyBpbnRlcnZhbCBwbGF5YmFjayBzbmFwcyB0aGUgd2luZG93IG9udG8gaGlzdG9ncmFtIGJpbnMuXG4gIGlmIChcbiAgICAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgfHwgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSkgJiZcbiAgICAocHJldmlvdXNXaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwgfHwgYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKVxuICApIHtcbiAgICBjb25zdCBhZGp1c3RlZCA9IGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coXG4gICAgICBzdGF0ZSxcbiAgICAgIG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyIHwgUmFuZ2VGaWx0ZXIsXG4gICAgICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQoc3RhdGUuZGF0YXNldHMsIG5leHRGaWx0ZXIsIHN0YXRlLmxheWVycylcbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFkanVzdGVkLnZhbHVlKSAmJiBhZGp1c3RlZC52YWx1ZS5ldmVyeSh2ID0+IE51bWJlci5pc0Zpbml0ZSh2KSkpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSBhZGp1c3RlZDtcbiAgICB9XG4gIH1cblxuICBpZiAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSkge1xuICAgIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgICBzdGF0ZSxcbiAgICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgWydhbmltYXRpb25XaW5kb3cnLCAndmFsdWUnXSwgW2FuaW1hdGlvbldpbmRvdywgbmV4dEZpbHRlci52YWx1ZV0pXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV4dEZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBpZiAoZmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV4dEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFmZmVjdGVkRGF0YXNldElkczogc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXJJbmRleD86IG51bWJlclxuKTogUyB7XG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcCgoZmlsdGVyLCBmaWx0ZXJJbmRleCkgPT4ge1xuICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gdXBkYXRlZEZpbHRlckluZGV4KSB7XG4gICAgICByZXR1cm4gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgZmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVmcmVzaE51bWVyaWNQbG90ID1cbiAgICAgIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UgJiZcbiAgICAgICghaXNTaWRlRmlsdGVyKGZpbHRlcikgfHwgZmlsdGVyLnBsb3RUeXBlPy50eXBlID09PSBQTE9UX1RZUEVTLmxpbmVDaGFydCk7XG4gICAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmICFzaG91bGRSZWZyZXNoTnVtZXJpY1Bsb3QpIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmVkRGF0YXNldElkcyA9IGZpbHRlci5kYXRhSWQuZmlsdGVyKGRhdGFJZCA9PiBhZmZlY3RlZERhdGFzZXRJZHMuaW5jbHVkZXMoZGF0YUlkKSk7XG4gICAgaWYgKCFzaGFyZWREYXRhc2V0SWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkYXRlZEZpbHRlciA9IHNoYXJlZERhdGFzZXRJZHMucmVkdWNlKHJlbW92ZUZpbHRlclBsb3QsIGZpbHRlcik7XG4gICAgcmV0dXJuIHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIGludmFsaWRhdGVkRmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBzZXQoWydmaWx0ZXJzJ10sIGZpbHRlcnMsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBhZmZlY3RlZERhdGFzZXRJZHMgPSB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGFmZmVjdGVkRGF0YXNldElkcyxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIFVwZGF0ZSBwbG90cyBhZnRlciBmaWx0ZXJpbmcgc28gdGhleSB1c2UgdGhlIGxhdGVzdCBmaWx0ZXJlZCBpbmRleGVzLlxuICAvLyBPdGhlciB0aW1lIGZpbHRlcnMgbmVlZCB0aGVpciBjYWNoZWQgYmlucyBpbnZhbGlkYXRlZCBmb3Igc2hhcmVkIGRhdGFzZXRzLlxuICBuZXdTdGF0ZSA9IHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmcobmV3U3RhdGUsIGFmZmVjdGVkRGF0YXNldElkcywgaWR4KTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMsIGZpbHRlcnMpIHtcbiAgY29uc3QgY3VycmVudERhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gIGlmIChjdXJyZW50RGF0YUlkICYmIHZhbHVlICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpbHRlci5uYW1lW3ZhbHVlSW5kZXhdO1xuICAgIGNvbnN0IGVuZEZpZWxkTmFtZSA9IHRvQXJyYXkoZmlsdGVyLmVuZE5hbWUpW3ZhbHVlSW5kZXhdO1xuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBmaWx0ZXIudmFsdWU7XG4gICAgY29uc3QgbmV4dERhdGFJZHMgPSBmaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dERhdGFJZHNbdmFsdWVJbmRleF0gPSB2YWx1ZTtcblxuICAgIGxldCBuZXh0RmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGN1cnJlbnREYXRhSWQpO1xuICAgIG5leHRGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dERhdGFJZHMsIG5leHRGaWx0ZXIpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFsnZ3B1Q2hhbm5lbCcsICdncHVFbmRDaGFubmVsJ10pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5leHRGaWx0ZXJbcHJvcF0pKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFubmVscyA9IG5leHRGaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgICAgbmV4dENoYW5uZWxzW3ZhbHVlSW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICBuZXh0RmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dENoYW5uZWxzLCBuZXh0RmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbdmFsdWVdO1xuICAgIGNvbnN0IGZpZWxkID0gZGF0YXNldD8uZmllbGRzLmZpbmQoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5uYW1lID09PSBmaWVsZE5hbWUpO1xuICAgIGNvbnN0IGNhblJlYmluZEZpZWxkID1cbiAgICAgIGZpZWxkICYmICghZmlsdGVyLmZpZWxkVHlwZSB8fCBhcmVGaWx0ZXJGaWVsZFR5cGVzQ29tcGF0aWJsZShmaWx0ZXIuZmllbGRUeXBlLCBmaWVsZC50eXBlKSk7XG4gICAgY29uc3Qge2ZpbHRlcjogcmVib3VuZEZpbHRlcn0gPSBjYW5SZWJpbmRGaWVsZFxuICAgICAgPyBhcHBseUZpbHRlckZpZWxkTmFtZShuZXh0RmlsdGVyLCBkYXRhc2V0cywgdmFsdWUsIGZpZWxkTmFtZSwgdmFsdWVJbmRleCwge1xuICAgICAgICAgIG1lcmdlRG9tYWluOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICA6IHtmaWx0ZXI6IG51bGx9O1xuXG4gICAgaWYgKHJlYm91bmRGaWx0ZXIpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSByZWJvdW5kRmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXh0TmFtZXMgPSBuZXh0RmlsdGVyLm5hbWUuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG5leHRGaWVsZElkeCA9IG5leHRGaWx0ZXIuZmllbGRJZHguc2xpY2UoKTtcbiAgICAgIG5leHROYW1lc1t2YWx1ZUluZGV4XSA9ICcnO1xuICAgICAgbmV4dEZpZWxkSWR4W3ZhbHVlSW5kZXhdID0gLTE7XG4gICAgICBuZXh0RmlsdGVyID0ge1xuICAgICAgICAuLi5uZXh0RmlsdGVyLFxuICAgICAgICBuYW1lOiBuZXh0TmFtZXMsXG4gICAgICAgIGZpZWxkSWR4OiBuZXh0RmllbGRJZHgsXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVuZEZpZWxkTmFtZSAmJiBuZXh0RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHJlYm91bmRFbmRGaWx0ZXJ9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBuZXh0RmlsdGVyLFxuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVuZEZpZWxkTmFtZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChyZWJvdW5kRW5kRmlsdGVyKSB7XG4gICAgICAgIG5leHRGaWx0ZXIgPSByZWJvdW5kRW5kRmlsdGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge2ZpbHRlcjogY2xlYXJlZEVuZEZpbHRlcn0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgICAgbmV4dEZpbHRlcixcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgbmV4dEZpbHRlciA9IGNsZWFyZWRFbmRGaWx0ZXIgfHwgbmV4dEZpbHRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIsIGRhdGFzZXRzKTtcbiAgICBuZXh0RmlsdGVyID0ge1xuICAgICAgLi4ubmV4dEZpbHRlcixcbiAgICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzLmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHMuc3RlcH0gOiB7fSlcbiAgICB9O1xuXG4gICAgaWYgKG5leHRGaWx0ZXIuZ3B1KSB7XG4gICAgICBuZXh0RmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKG5leHRGaWx0ZXIsIGZpbHRlcnMpLCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dEZpbHRlcixcbiAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKHByZXZpb3VzVmFsdWUsIG5leHRGaWx0ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChjdXJyZW50RGF0YUlkKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBzdGF0ZS5maWx0ZXJzXG4gICAgICApO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnaW52ZXJ0ZWQnOiB7XG4gICAgICBjb25zdCBzdXBwb3J0c0ludmVyc2lvbiA9IGZpbHRlci5kYXRhSWQuZXZlcnkoXG4gICAgICAgIGRhdGFzZXRJZCA9PiAhc3RhdGUuZGF0YXNldHNbZGF0YXNldElkXT8uZGlzYWJsZURhdGFPcGVyYXRpb25cbiAgICAgICk7XG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgaW52ZXJ0ZWQ6IHN1cHBvcnRzSW52ZXJzaW9uICYmIEJvb2xlYW4odmFsdWUpXG4gICAgICB9O1xuICAgICAgaWYgKGZpbHRlci5pbnZlcnRlZCkge1xuICAgICAgICAvLyBHUFUgcmFuZ2UgdGVzdHMgY2FuIG9ubHkga2VlcCB2YWx1ZXMgaW5zaWRlIHRoZSB3aW5kb3cuXG4gICAgICAgIGZpbHRlciA9IGRpc2FibGVHcHVJZkludmVydGVkKGZpbHRlcik7XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGVVc2VzR3B1KGZpbHRlci50eXBlKSkge1xuICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKFxuICAgICAgICAgIHNldEZpbHRlckdwdU1vZGUoey4uLmZpbHRlciwgZ3B1OiB0cnVlfSwgc3RhdGUuZmlsdGVycyksXG4gICAgICAgICAgc3RhdGUuZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBjb25zdCBwcmV2aW91c051bWVyaWNJbnRlcnZhbCA9IG5ld0ZpbHRlci5wbG90VHlwZT8ubnVtZXJpY0ludGVydmFsO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIGxldCBwbG90VHlwZVVwZGF0ZSA9IG5ld1Byb3AucGxvdFR5cGU7XG4gICAgICBpZiAocGxvdFR5cGVVcGRhdGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBsb3RUeXBlVXBkYXRlLCAnZ3JvdXBCeScpKSB7XG4gICAgICAgIHBsb3RUeXBlVXBkYXRlID0ge1xuICAgICAgICAgIC4uLnBsb3RUeXBlVXBkYXRlLFxuICAgICAgICAgIGdyb3VwQnk6IG1lcmdlUGxvdEdyb3VwQnkobmV3RmlsdGVyLnBsb3RUeXBlPy5ncm91cEJ5LCBwbG90VHlwZVVwZGF0ZS5ncm91cEJ5KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHBsb3RUeXBlVXBkYXRlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbnVtZXJpY0ludGVydmFsQ2hhbmdlZCA9XG4gICAgbmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSAmJlxuICAgIG5ld0ZpbHRlci5wbG90VHlwZT8ubnVtZXJpY0ludGVydmFsICE9PSBwcmV2aW91c051bWVyaWNJbnRlcnZhbDtcbiAgaWYgKG51bWVyaWNJbnRlcnZhbENoYW5nZWQpIHtcbiAgICBuZXdGaWx0ZXIgPSB7Li4uKG5ld0ZpbHRlciBhcyBSYW5nZUZpbHRlciksIGJpbnM6IHVuZGVmaW5lZCwgbGluZUNoYXJ0OiB1bmRlZmluZWR9O1xuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcblxuICBpZiAoXG4gICAgbnVtZXJpY0ludGVydmFsQ2hhbmdlZCAmJlxuICAgIG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UgJiZcbiAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICkge1xuICAgIGNvbnN0IGFkanVzdGVkID0gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgbmV3RmlsdGVyIGFzIFJhbmdlRmlsdGVyLFxuICAgICAgZ2V0UGxvdEJhc2VJbmRleEJ5RGF0YUlkKG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIsIG5ld1N0YXRlLmxheWVycylcbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFkanVzdGVkLnZhbHVlKSAmJiBhZGp1c3RlZC52YWx1ZS5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeCwgcHJvcDogJ3ZhbHVlJywgdmFsdWU6IGFkanVzdGVkLnZhbHVlfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICBpID09PSBpZHhcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgdmlld1xuICAgICAgICB9XG4gICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uZixcbiAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgIH1cbiAgICAgIDogZlxuICApO1xuXG4gIGNvbnN0IG9wZW5lZEZpbHRlciA9IGZpbHRlcnNbaWR4XTtcbiAgaWYgKHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkICYmIG9wZW5lZEZpbHRlcj8udHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlKSB7XG4gICAgY29uc3QgaW52YWxpZGF0ZWRGaWx0ZXIgPSB0b0FycmF5KG9wZW5lZEZpbHRlci5kYXRhSWQpLnJlZHVjZShyZW1vdmVGaWx0ZXJQbG90LCBvcGVuZWRGaWx0ZXIpO1xuICAgIGZpbHRlcnNbaWR4XSA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIGludmFsaWRhdGVkRmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnNcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyhuZXdTdGF0ZSwgZGF0YUlkKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdcbiAgICA/IHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5KHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLCBsYXllclRvUmVtb3ZlLmlkKVxuICAgIDogc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpLFxuICAgIC8vIE9ubHkgcmVwbGFjZSBpbnRlcmFjdGlvbkNvbmZpZyB3aGVuIGEgY29udHJvbGxlciBhY3R1YWxseSBsaXN0ZWQgdGhpcyBsYXllci5cbiAgICAvLyBQYXJ0aWFsIHRlc3Qgc3RhdGVzIG9taXQgaXQsIGFuZCBhZGRpbmcgdGhlIGtleSB3b3VsZCBjaGFuZ2UgdGhhdCBzaGFwZS5cbiAgICAuLi4oaW50ZXJhY3Rpb25Db25maWcgIT09IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnID8ge2ludGVyYWN0aW9uQ29uZmlnfSA6IHt9KVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihcbiAgICByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBjaGFydCA9PiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpICYmIGNoYXJ0LmxheWVySWQgPT09IGxheWVyVG9SZW1vdmUuaWRcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcpOiBjaGFydCBpcyBMYXllckNoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIGNoYXJ0LnR5cGUgPT09ICdsYXllckNoYXJ0Jztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcsIHByb3BzOiBQYXJ0aWFsPENoYXJ0Q29uZmlnPik6IENoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jaGFydCxcbiAgICAuLi5wcm9wcyxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgLi4uKHByb3BzLmRpc3BsYXkgfHwge30pXG4gICAgfSxcbiAgICBjaGFydERpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmNoYXJ0RGlzcGxheSxcbiAgICAgIC4uLigocHJvcHMgYXMgQ2hhcnRDb25maWcpLmNoYXJ0RGlzcGxheSB8fCB7fSlcbiAgICB9XG4gIH0gYXMgQ2hhcnRDb25maWc7XG59XG5cbmZ1bmN0aW9uIGF4aXNGaWVsZElmUHJlc2VudDxUIGV4dGVuZHMge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGx9PihcbiAgYXhpczogVCB8IHVuZGVmaW5lZCxcbiAgZmllbGROYW1lczogU2V0PHN0cmluZz5cbik6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoIWF4aXM/LmZpZWxkPy5uYW1lIHx8IGZpZWxkTmFtZXMuaGFzKGF4aXMuZmllbGQubmFtZSkpIHtcbiAgICByZXR1cm4gYXhpcztcbiAgfVxuICByZXR1cm4gey4uLmF4aXMsIGZpZWxkOiBudWxsLCB0aXRsZTogbnVsbH07XG59XG5cbmZ1bmN0aW9uIGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMoXG4gIGNoYXJ0OiBDaGFydENvbmZpZyxcbiAgZGF0YXNldDoge2ZpZWxkcz86IHtuYW1lOiBzdHJpbmd9W119IHwgdW5kZWZpbmVkXG4pOiBDaGFydENvbmZpZyB7XG4gIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KChkYXRhc2V0Py5maWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKSk7XG4gIGNvbnN0IG5leHQgPSBjaGFydCBhcyBDaGFydENvbmZpZyAmIHtcbiAgICB4QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgeUF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGdyb3VwQnk/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHZhbHVlPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgfTtcbiAgcmV0dXJuIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQsIHtcbiAgICB4QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueEF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIHlBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC55QXhpcywgZmllbGROYW1lcyksXG4gICAgYXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuYXhpcywgZmllbGROYW1lcyksXG4gICAgZ3JvdXBCeTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuZ3JvdXBCeSwgZmllbGROYW1lcyksXG4gICAgdmFsdWU6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnZhbHVlLCBmaWVsZE5hbWVzKVxuICB9IGFzIFBhcnRpYWw8Q2hhcnRDb25maWc+KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVyczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgc2hvdWxkUmVtb3ZlOiAoY2hhcnQ6IENoYXJ0Q29uZmlnKSA9PiBib29sZWFuXG4pOiBUIHtcbiAgY29uc3QgY2hhcnRzID0gc3RhdGUuY2hhcnRzIHx8IFtdO1xuICBjb25zdCByZW1vdmVkID0gY2hhcnRzLmZpbHRlcihzaG91bGRSZW1vdmUpO1xuICBpZiAoIXJlbW92ZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlbW92ZWRJZHMgPSBuZXcgU2V0KHJlbW92ZWQubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IGZpbHRlcklkcyA9IG5ldyBTZXQoXG4gICAgcmVtb3ZlZC5mbGF0TWFwKGNoYXJ0ID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2hhcnQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICAgICAgcmV0dXJuIGlkID8gW2lkLCBgJHtpZH0teGAsIGAke2lkfS15YF0gOiBbXTtcbiAgICB9KVxuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IGNoYXJ0cy5maWx0ZXIoY2hhcnQgPT4gIXJlbW92ZWRJZHMuaGFzKGNoYXJ0LmlkKSlcbiAgfTtcbiAgaWYgKGZpbHRlcklkcy5zaXplKSB7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBUO1xufVxuXG4vKipcbiAqIEFkZCBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjaGFydH06IFZpc1N0YXRlQWN0aW9ucy5BZGRDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjaGFydD8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKChzdGF0ZS5jaGFydHMgfHwgW10pLnNvbWUoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGNoYXJ0LmlkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGV4aXN0aW5nID0+ICh7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgaXNKc29uRWRpdG9yQWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICB7XG4gICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogY2hhcnQuZGlzcGxheT8uaXNDb25maWdBY3RpdmUgPz8gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gKHN0YXRlLmNoYXJ0cyB8fCBbXSkuZmluZEluZGV4KGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5jaGFydHNbaWR4XTtcbiAgY29uc3QgZGF0YUlkQ2hhbmdlZCA9IHR5cGVvZiBwcm9wcy5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHByb3BzLmRhdGFJZCAhPT0gcHJldi5kYXRhSWQ7XG4gIGNvbnN0IGxheWVySWRDaGFuZ2VkID1cbiAgICBpc0xheWVyQ2hhcnRDb25maWcocHJldikgJiZcbiAgICB0eXBlb2YgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgPT09ICdzdHJpbmcnICYmXG4gICAgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgIT09IHByZXYubGF5ZXJJZDtcbiAgbGV0IG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKHByZXYsIHByb3BzKTtcbiAgaWYgKGRhdGFJZENoYW5nZWQgfHwgbGF5ZXJJZENoYW5nZWQpIHtcbiAgICBjb25zdCBkYXRhSWQgPSBuZXh0LmRhdGFJZCB8fCB1bmRlZmluZWQ7XG4gICAgbmV4dCA9IGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMobmV4dCwgZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKG5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQpIHtcbiAgICAgIG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKG5leHQsIHtcbiAgICAgICAgY3Jvc3NGaWx0ZXI6IHsuLi5uZXh0LmNyb3NzRmlsdGVyLCBlbmFibGVkOiBmYWxzZSwgdmFsdWU6IHt9LCBmaWVsZE5hbWVzOiB7fX1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBjaGFydHMgPSBbLi4uc3RhdGUuY2hhcnRzXTtcbiAgY2hhcnRzW2lkeF0gPSBuZXh0O1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHNcbiAgfTtcbiAgY29uc3QgZmlsdGVySWQgPSBuZXh0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZCB8fCBwcmV2LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgaWYgKHByZXYuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgIW5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgZmlsdGVySWQpIHtcbiAgICBjb25zdCBvd25lZEZpbHRlcklkcyA9IG5ldyBTZXQoW2ZpbHRlcklkLCBgJHtmaWx0ZXJJZH0teGAsIGAke2ZpbHRlcklkfS15YF0pO1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIG93bmVkRmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hhcnQgYW5kIGFueSBjcm9zcy1maWx0ZXIgaXQgb3duc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKHN0YXRlLCBjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/PyBJTklUSUFMX0FOTk9UQVRJT05fS0lORDtcbiAgY29uc3QgcHJvdmlkZWRBbmdsZSA9IE51bWJlci5pc0Zpbml0ZSgoY29uZmlnIGFzIGFueSk/LmFuZ2xlKSA/IChjb25maWcgYXMgYW55KS5hbmdsZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVyaXZlZEZyb21BbmdsZSA9XG4gICAgcHJvdmlkZWRBbmdsZSAhPSBudWxsID8gdGV4dFBsYWNlbWVudEZyb21BbmdsZShwcm92aWRlZEFuZ2xlKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dFNpZGUgPVxuICAgIGNvbmZpZz8udGV4dFNpZGUgPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy5zaWRlID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgfHwga2luZCA9PT0gQW5ub3RhdGlvbktpbmQuUlVMRVJcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUpO1xuICBjb25zdCB0ZXh0VmVydGljYWxQb3NpdGlvbiA9XG4gICAgY29uZmlnPy50ZXh0VmVydGljYWxQb3NpdGlvbiA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnZlcnRpY2FsID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgfHwga2luZCA9PT0gQW5ub3RhdGlvbktpbmQuUlVMRVJcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICBpZDogY29uZmlnPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogY29uZmlnPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZTogY29uZmlnPy5hdXRvU2l6ZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplWTogY29uZmlnPy5hdXRvU2l6ZVkgPz8gdHJ1ZSxcbiAgICBhbmNob3JQb2ludDogY29uZmlnPy5hbmNob3JQb2ludCA/PyAoWzAsIDBdIGFzIFtudW1iZXIsIG51bWJlcl0pLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdOZXcgQW5ub3RhdGlvbicsXG4gICAgLi4uKGNvbmZpZz8uZWRpdG9yU3RhdGUgPyB7ZWRpdG9yU3RhdGU6IGNvbmZpZy5lZGl0b3JTdGF0ZX0gOiB7fSksXG4gICAgbGluZUNvbG9yOiBjb25maWc/LmxpbmVDb2xvciA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICBsaW5lV2lkdGg6IGNvbmZpZz8ubGluZVdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgIHRleHRXaWR0aDogY29uZmlnPy50ZXh0V2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gICAgdGV4dEhlaWdodDogY29uZmlnPy50ZXh0SGVpZ2h0ID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgICB0ZXh0VmVydGljYWxBbGlnbjogY29uZmlnPy50ZXh0VmVydGljYWxBbGlnbiA/PyAoJ2JvdHRvbScgYXMgY29uc3QpLFxuICAgIC4uLih0ZXh0U2lkZSA/IHt0ZXh0U2lkZX0gOiB7fSksXG4gICAgLi4uKHRleHRWZXJ0aWNhbFBvc2l0aW9uID8ge3RleHRWZXJ0aWNhbFBvc2l0aW9ufSA6IHt9KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRBbmdsZSA9XG4gICAgdGV4dFNpZGUgJiYgdGV4dFZlcnRpY2FsUG9zaXRpb25cbiAgICAgID8gQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlRbYCR7dGV4dFNpZGV9LSR7dGV4dFZlcnRpY2FsUG9zaXRpb259YF1cbiAgICAgIDogSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFO1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5SVUxFUjoge1xuICAgICAgY29uc3QgYW5jaG9yUG9pbnQgPSBiYXNlLmFuY2hvclBvaW50O1xuICAgICAgY29uc3Qgc2hpZnRlZCA9IGFkZE1ldGVyc1RvTG5nTGF0KGFuY2hvclBvaW50LCBbXG4gICAgICAgIElOSVRJQUxfQU5OT1RBVElPTl9SVUxFUl9MRU5HVEhfTUVURVJTLFxuICAgICAgICAwLFxuICAgICAgICAwXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGFsdGl0dWRlID0gYW5jaG9yUG9pbnRbMl07XG4gICAgICBjb25zdCBkZWZhdWx0RW5kUG9pbnQgPVxuICAgICAgICBhbHRpdHVkZSAhPT0gdW5kZWZpbmVkICYmIE51bWJlci5pc0Zpbml0ZShhbHRpdHVkZSlcbiAgICAgICAgICA/IChbc2hpZnRlZFswXSwgc2hpZnRlZFsxXSwgYWx0aXR1ZGVdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSlcbiAgICAgICAgICA6IChbc2hpZnRlZFswXSwgc2hpZnRlZFsxXV0gYXMgW251bWJlciwgbnVtYmVyXSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5SVUxFUixcbiAgICAgICAgZW5kUG9pbnQ6IChjb25maWcgYXMgYW55KT8uZW5kUG9pbnQgPz8gZGVmYXVsdEVuZFBvaW50LFxuICAgICAgICBzaG93Q3VzdG9tVGV4dDogKGNvbmZpZyBhcyBhbnkpPy5zaG93Q3VzdG9tVGV4dCA/PyB0cnVlLFxuICAgICAgICBzaG93RGlzdGFuY2U6IChjb25maWcgYXMgYW55KT8uc2hvd0Rpc3RhbmNlID8/IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoXG4gICAgICBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIGdldFpvb21PcGFjaXR5QW5ub3RhdGlvblRhcmdldElkKGlkKVxuICAgICksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIERlcml2ZWQgdGFibGVzIGFyZSBzbmFwc2hvdHM6IGtlZXAgdGhlbSB3aGVuIGEgc291cmNlIGRhdGFzZXQgaXMgZGVsZXRlZC5cbiAgLy8gT25seSBkcm9wIGluLXByb2dyZXNzIGdyb3VwLWJ5IC8gam9pbiBkcmFmdHMgdGhhdCByZWZlcmVuY2VkIHRoaXMgZGF0YXNldC5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGUsIFtkYXRhc2V0S2V5XSkgYXMgVDtcbiAgcmV0dXJuIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyKG5leHRTdGF0ZSwgZGF0YXNldEtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFQsIGRhdGFzZXRLZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBfZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuZXhwb3J0IGNvbnN0IHNldENhbWVyYUJvb2ttYXJrc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMuc2V0Q2FtZXJhQm9va21hcmtzPlxuKTogVmlzU3RhdGUgPT4gKHsuLi5zdGF0ZSwgY2FtZXJhQm9va21hcmtzOiBub3JtYWxpemVDYW1lcmFCb29rbWFya3MoYWN0aW9uLnBheWxvYWQpfSk7XG5cbmV4cG9ydCBjb25zdCBzZXRDYW1lcmFUb3VyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5zZXRDYW1lcmFUb3VyPlxuKTogVmlzU3RhdGUgPT4gKHsuLi5zdGF0ZSwgY2FtZXJhVG91cjogbm9ybWFsaXplQ2FtZXJhVG91cihhY3Rpb24ucGF5bG9hZCl9KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWdcbiAgICA/IHsuLi5yZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpLCBjYW1lcmFCb29rbWFya3M6IFtdLCBjYW1lcmFUb3VyOiBudWxsfVxuICAgIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogR0VPQ09ERVJfREFUQVNFVF9OQU1FfSk7XG4gIH1cblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInKSB7XG4gICAgY29uc3QgZ2VvY29kZXJMYXllciA9IG5ld1N0YXRlLmxheWVycy5maW5kKGxheWVyID0+IGxheWVyLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCk7XG4gICAgaWYgKGdlb2NvZGVyTGF5ZXIpIHtcbiAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgb2xkTGF5ZXI6IGdlb2NvZGVyTGF5ZXIsXG4gICAgICAgIG5ld0NvbmZpZzoge2NvbG9yOiBjb25maWcuY29uZmlnLmNvbG9yID8/IEdFT0NPREVSX0lDT05fQ09MT1J9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhcbiAgICAgICAgcHJvZ3Jlc3NJZCxcbiAgICAgICAgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApLFxuICAgICAgICBwcm9ncmVzcz8ucGhhc2UgPT09ICdwcm9jZXNzaW5nJyA/ICdwcm9jZXNzaW5nJyA6IHVuZGVmaW5lZFxuICAgICAgKVxuICB9KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJMb2FkaW5nUHJvZ3Jlc3Moc3RhdGU6IFZpc1N0YXRlLCBpZHM/OiBzdHJpbmdbXSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgY3VycmVudCA9IHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fTtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXMocHJvY2Vzc2luZykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319O1xuICB9XG4gIGlmICghaWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5jdXJyZW50fTtcbiAgY29uc3QgbmV4dFByb2Nlc3NpbmcgPSB7Li4ucHJvY2Vzc2luZ307XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gICAgZGVsZXRlIG5leHRQcm9jZXNzaW5nW2lkXTtcbiAgfSk7XG4gIHJldHVybiB7Li4uc3RhdGUsIGxvYWRpbmdQcm9ncmVzczogbmV4dCwgbG9hZGluZ1Byb2Nlc3Npbmc6IG5leHRQcm9jZXNzaW5nfTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgICBjc3ZIZWFkZXI/OiBzdHJpbmdbXTtcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBjc3ZIZWFkZXI6IG5leHREYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQubmFtZSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgLy8gUmVidWlsZCBkb21haW5zIGZyb20gYWxsIGRhdGFzZXRzIGluIGEgc3luY2VkIGZpbHRlciwga2VlcGluZyBpdHMgc2VsZWN0aW9uXG4gIC8vIGFuZCBzZXR0aW5ncy4gUmV2YWxpZGF0aW5nIGEgc2F2ZWQgZmlsdGVyIHdvdWxkIHJlc2V0IGl0cyBHUFUgbW9kZS5cbiAgY29uc3QgZmlsdGVycyA9IHN0YXRlLmZpbHRlcnMubWFwKGZpbHRlciA9PiB7XG4gICAgaWYgKCFmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkgfHwgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uKSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cbiAgICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuICAgIHJldHVybiBkb21haW5TdGVwcyA/IHsuLi5maWx0ZXIsIGRvbWFpbjogZG9tYWluU3RlcHMuZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcy5zdGVwfSA6IGZpbHRlcjtcbiAgfSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHMsIGZpbHRlcnN9LCBkYXRhSWQpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRTdGF0ZSxcbiAgICBmaWx0ZXJzOiBuZXh0U3RhdGUuZmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgICBmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZClcbiAgICAgICAgPyB1cGRhdGVGaWx0ZXJQbG90KFxuICAgICAgICAgICAgbmV4dFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgICAgZmlsdGVyLmRhdGFJZC5yZWR1Y2UocmVtb3ZlRmlsdGVyUGxvdCwgZmlsdGVyKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5leHRTdGF0ZS5sYXllcnNcbiAgICAgICAgICApXG4gICAgICAgIDogZmlsdGVyXG4gICAgKVxuICB9O1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICAvLyBQb2x5Z29uIGZpbHRlcnMgcmVhZCBjYWNoZWQgZ2VvbWV0cnkuIFJlZnJlc2ggaXQgYmVmb3JlIGZpbHRlcmluZyBzbyBhXG4gIC8vIG1vdmVkIGZlYXR1cmUgaXMgdGVzdGVkIGF0IGl0cyBuZXcgcG9zaXRpb24sIGluY2x1ZGluZyBzYW1lLWxlbmd0aCB1cGRhdGVzLlxuICBjb25zdCBuZWVkc0dlb21ldHJ5ID0gc3RhdGUubGF5ZXJzLnNvbWUoXG4gICAgbGF5ZXIgPT5cbiAgICAgIGxheWVyLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCAmJlxuICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgIHN0YXRlLmZpbHRlcnMuc29tZShcbiAgICAgICAgZmlsdGVyID0+XG4gICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmXG4gICAgICAgICAgZmlsdGVyLmVuYWJsZWQgIT09IGZhbHNlICYmXG4gICAgICAgICAgZmlsdGVyLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKVxuICAgICAgKVxuICApO1xuICBpZiAobmVlZHNHZW9tZXRyeSkge1xuICAgIHN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKHN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgfVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IG9yIEFycm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCBub3QgaW1wbGVtZW50ZWQpLiBOZXN0ZWQsIGJpbmFyeSwgYW5kIGdlb2Fycm93IEFycm93IGNvbHVtbnMgYXJlIHJlamVjdGVkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBvciBBcnJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBEdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbnR5cGUgUHJvZ3Jlc3NpdmVMb2FkQ29udGludWF0aW9uID0gUmV0dXJuVHlwZTx0eXBlb2YgbG9hZEZpbGVzU3VjY2Vzcz4gJiB7XG4gIHByb2dyZXNzaXZlU3RlcHM6IEZpbGVDYWNoZUl0ZW1bXVtdO1xufTtcblxudHlwZSBQcm9ncmVzc2l2ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uID0gVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uICYge1xuICBvbkZpbmlzaD86IFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbjtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NpdmVDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQgPSBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQgJiB7XG4gIG9uRmluaXNoPzogUHJvZ3Jlc3NpdmVMb2FkQ29udGludWF0aW9uO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHJlYWR5VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3QgcmVtb3RlVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3QgaHlkcmF0ZVByb2dyZXNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHByb3RvID0ge2luZm8sIC4uLnJlc3R9O1xuICAgIGNvbnN0IHJlbW90ZSA9IG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUocHJvdG8pO1xuICAgIGlmIChyZW1vdGUpIHtcbiAgICAgIGh5ZHJhdGVQcm9ncmVzc1tnZXREYXRhc2V0UHJvZ3Jlc3NJZChwcm90bywgZGF0YXNldEluZGV4KV0gPSAwO1xuICAgIH1cbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhwcm90bywgc3RhdGUuZGF0YXNldHMpO1xuICAgIGlmICh0YXNrKSB7XG4gICAgICAocmVtb3RlID8gcmVtb3RlVGFza3MgOiByZWFkeVRhc2tzKS5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFyc2VkIGRhdGFzZXRzIGFyZSBjb21taXR0ZWQgb24gdGhlaXIgb3duLiBBIHJlbW90ZSBkb3dubG9hZCBpbiB0aGUgc2FtZVxuICAvLyBhZGQgbXVzdCBub3QgaG9sZCB0aGVtIHVudGlsIHRoZSBVUkwgZmluaXNoZXMuXG4gIGNvbnN0IHByb2dyZXNzSWRzID0gT2JqZWN0LmtleXMoaHlkcmF0ZVByb2dyZXNzKTtcbiAgY29uc3QgYmF0Y2hlczogQXJyYXk8e3Rhc2tzOiBUYXNrRGVzY3JpcHRvcltdOyBwcm9ncmVzc0lkczogc3RyaW5nW119PiA9IFtdO1xuICBpZiAocmVhZHlUYXNrcy5sZW5ndGgpIHtcbiAgICBiYXRjaGVzLnB1c2goe3Rhc2tzOiByZWFkeVRhc2tzLCBwcm9ncmVzc0lkczogW119KTtcbiAgfVxuICBpZiAocmVtb3RlVGFza3MubGVuZ3RoKSB7XG4gICAgYmF0Y2hlcy5wdXNoKHt0YXNrczogcmVtb3RlVGFza3MsIHByb2dyZXNzSWRzfSk7XG4gIH1cblxuICBpZiAoYmF0Y2hlcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcihcbiAgICAgIHVwZGF0ZWRTdGF0ZSxcbiAgICAgIHBheWxvYWRfKHtjaGFuZ2U6IGJhdGNoZXMubGVuZ3RoLCB0eXBlOiAnJ30pXG4gICAgKTtcbiAgICBpZiAocHJvZ3Jlc3NJZHMubGVuZ3RoKSB7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgbG9hZGluZ1Byb2dyZXNzOiB7XG4gICAgICAgICAgLi4udXBkYXRlZFN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgICAgICAuLi5oeWRyYXRlUHJvZ3Jlc3NcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uYmF0Y2hlcy5tYXAoKGJhdGNoLCBiYXRjaEluZGV4KSA9PlxuICAgICAgVGFzay5hbGxTZXR0bGVkKGJhdGNoLnRhc2tzKS5tYXAocmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IG9uRmluaXNoID0gKGFjdGlvbiBhcyBQcm9ncmVzc2l2ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uKS5vbkZpbmlzaDtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogUHJvZ3Jlc3NpdmVDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQgPSB7XG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcHJvZ3Jlc3NJZHM6IGJhdGNoLnByb2dyZXNzSWRzLFxuICAgICAgICAgIC4uLihvbkZpbmlzaCAmJiBiYXRjaEluZGV4ID09PSBiYXRjaGVzLmxlbmd0aCAtIDEgPyB7b25GaW5pc2h9IDoge30pXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyhwYXlsb2FkKTtcbiAgICAgIH0pXG4gICAgKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9ucywgcHJvZ3Jlc3NJZHMsIG9uRmluaXNofSA9XG4gICAgYWN0aW9uLnBheWxvYWQgYXMgUHJvZ3Jlc3NpdmVDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgY2xlYXJMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgICAgcHJvZ3Jlc3NJZHNcbiAgICApLFxuICAgIFtcbiAgICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzLFxuICAgICAgLy8gTWF0Y2ggdGhlIG9yaWdpbmFsIEFycm93IGJhdGNoaW5nIGNhZGVuY2U6IGNyb3NzIGFuIGV2ZW50LWxvb3AgdHVybiBzb1xuICAgICAgLy8gUmVhY3QvZGVjay5nbCBjYW4gcGFpbnQgdGhpcyBzbmFwc2hvdCBiZWZvcmUgdGhlIG5leHQgdGFibGUgdXBkYXRlLlxuICAgICAgLi4uKG9uRmluaXNoID8gW0RFTEFZX1RBU0soMTApLm1hcCgoKSA9PiBvbkZpbmlzaCldIDogW10pXG4gICAgXVxuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgLy8gYSBsYXllciBhbHJlYWR5IGluIGEgcGFuZWwgd2FzIG1lcmdlZCBmcm9tIHNwbGl0IG1hcHMsIHdoaWNoIGRlY2lkZSB0aGUgcGFuZWxzIHNob3dpbmcgaXRcbiAgICBjb25zdCBsYXllcnNOb3RJblNwbGl0TWFwcyA9IG5ld0xheWVycy5maWx0ZXIoXG4gICAgICBsID0+ICFtZXJnZWRTdGF0ZS5zcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycylcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBsYXllcnNOb3RJblNwbGl0TWFwcylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIEEgdGlsZXNldCBhY2Nlc3MgdG9rZW4gaXMgcmVhZCB3aGlsZSBmb3JtYXR0aW5nIGxheWVyIGRhdGEuIFJlZnJlc2hcbiAgICAvLyBvbmx5IHdoZW4gdGhhdCBmaWVsZCBjaGFuZ2VzIHNvIG90aGVyIG1ldGFkYXRhIGVkaXRzIChlLmcuIHJlZnJlc2hcbiAgICAvLyBpbnRlcnZhbCkgZG8gbm90IHJlYnVpbGQgZXZlcnkgbGF5ZXIgb24gdGhlIGRhdGFzZXQuXG4gICAgaWYgKHByb3BzLm1ldGFkYXRhICYmICd0aWxlM2RBY2Nlc3NUb2tlbicgaW4gcHJvcHMubWV0YWRhdGEpIHtcbiAgICAgIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgb3IgcmUtdHlwZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0bC5maWVsZD8ubmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkID1cbiAgICAgICAgbmFtZSAmJiBuZXdUYWJsZS5maWVsZHMuZmluZChjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLm5hbWUgPT09IChyZW5hbWVzW25hbWVdID8/IG5hbWUpKTtcbiAgICAgIHJldHVybiBmaWVsZCAmJiAoZmllbGQubmFtZSAhPT0gbmFtZSB8fCBmaWVsZC50eXBlICE9PSB0bC5maWVsZD8udHlwZSkgPyB7Li4udGwsIGZpZWxkfSA6IHRsO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG5jb25zdCBGSUxURVJfUExPVF9ZX0FYSVNfVFlQRVMgPSBuZXcgU2V0PHN0cmluZz4oW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyLCBBTExfRklFTERfVFlQRVMucmVhbF0pO1xuXG5mdW5jdGlvbiBjbGVhclRpbWVsaW5lRmlsdGVyU3RhdGUoZmlsdGVyOiBGaWx0ZXIpOiBGaWx0ZXIge1xuICBjb25zdCB7XG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IF9zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSxcbiAgICBzeW5jVGltZWxpbmVNb2RlOiBfc3luY1RpbWVsaW5lTW9kZSxcbiAgICB0aW1lQmluczogX3RpbWVCaW5zLFxuICAgIGxpbmVDaGFydDogX2xpbmVDaGFydCxcbiAgICB0aW1lem9uZTogX3RpbWV6b25lLFxuICAgIGludmVydFRyZW5kQ29sb3I6IF9pbnZlcnRUcmVuZENvbG9yLFxuICAgIHNob3dUaW1lRGlzcGxheTogX3Nob3dUaW1lRGlzcGxheSxcbiAgICAuLi5yZXN0XG4gIH0gPSBmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzdCxcbiAgICBmaXhlZERvbWFpbjogZmFsc2UsXG4gICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5mcmVlLFxuICAgIHlBeGlzOiBudWxsLFxuICAgIHBsb3RUeXBlOiB7dHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW19XG4gIH0gYXMgRmlsdGVyO1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVUaW1lbGluZVBsb3RBZnRlclByaW1hcnlSZW1vdmFsKFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBGaWx0ZXIge1xuICBpZiAoZmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgY29uc3QgcHJpbWFyeURhdGFzZXQgPSBkYXRhc2V0c1tmaWx0ZXIuZGF0YUlkWzBdXTtcbiAgY29uc3QgeUF4aXMgPSBmaWx0ZXIueUF4aXM/Lm5hbWVcbiAgICA/IHByaW1hcnlEYXRhc2V0Py5maWVsZHMuZmluZChcbiAgICAgICAgZmllbGQgPT4gZmllbGQubmFtZSA9PT0gZmlsdGVyLnlBeGlzPy5uYW1lICYmIEZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUy5oYXMoZmllbGQudHlwZSlcbiAgICAgICkgPz8gbnVsbFxuICAgIDogbnVsbDtcbiAgY29uc3QgZ3JvdXBCeUZpZWxkTmFtZSA9IGZpbHRlci5wbG90VHlwZT8uZ3JvdXBCeT8uZmllbGROYW1lO1xuICBjb25zdCBoYXNHcm91cEJ5RmllbGQgPSBncm91cEJ5RmllbGROYW1lXG4gICAgPyBwcmltYXJ5RGF0YXNldD8uZmllbGRzLnNvbWUoZmllbGQgPT4gZmllbGQubmFtZSA9PT0gZ3JvdXBCeUZpZWxkTmFtZSlcbiAgICA6IHRydWU7XG4gIGNvbnN0IHBsb3RUeXBlID0ge1xuICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAuLi4oZmlsdGVyLnlBeGlzICYmICF5QXhpcyA/IHt0eXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbX0gOiB7fSksXG4gICAgLi4uKCFoYXNHcm91cEJ5RmllbGQgPyB7Z3JvdXBCeTogbnVsbH0gOiB7fSlcbiAgfTtcblxuICByZXR1cm4gey4uLmZpbHRlciwgeUF4aXMsIHBsb3RUeXBlLCBsaW5lQ2hhcnQ6IHVuZGVmaW5lZH07XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgY29uc3QgW3NvcnRlZENvbHVtbiwgc29ydE1vZGVdID0gT2JqZWN0LmVudHJpZXMoZXhpc3Rpbmcuc29ydENvbHVtbiB8fCB7fSlbMF0gfHwgW107XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcbiAgbmV3VGFibGUuZGF0YVJldmlzaW9uID0gZXhpc3RpbmcuZGF0YVJldmlzaW9uICsgMTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBNYXAobmV3VGFibGUuZmllbGRzLm1hcChmaWVsZCA9PiBbZmllbGQubmFtZSwgZmllbGRdKSk7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpKTtcbiAgbmV3VGFibGUuaGlkZGVuQ29sdW1ucyA9IChleGlzdGluZy5oaWRkZW5Db2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkpO1xuICBjb25zdCBuZXh0U29ydGVkQ29sdW1uID0gc29ydGVkQ29sdW1uID8gcmVuYW1lc1tzb3J0ZWRDb2x1bW5dID8/IHNvcnRlZENvbHVtbiA6IG51bGw7XG4gIGlmIChuZXh0U29ydGVkQ29sdW1uICYmIHNvcnRNb2RlICYmIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmV4dFNvcnRlZENvbHVtbikpIHtcbiAgICBzb3J0RGF0YXNldEJ5Q29sdW1uKG5ld1RhYmxlLCBuZXh0U29ydGVkQ29sdW1uLCBzb3J0TW9kZSk7XG4gIH1cblxuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcbiAgY29uc3QgZGF0YXNldElkc1RvUmVmaWx0ZXIgPSBuZXcgU2V0PHN0cmluZz4oW2RhdGFJZF0pO1xuXG4gIC8vIDIuIHJlY29uY2lsZSBmaWx0ZXJzXG4gIGxldCBuZXdGaWx0ZXJzID0gc3RhdGUuZmlsdGVyc1xuICAgIC5tYXAoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IHZpID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFJZCk7XG4gICAgICBpZiAodmkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIFBvbHlnb24gZmlsdGVycyB0YXJnZXQgbGF5ZXJzIHJhdGhlciB0aGFuIGRhdGFzZXQgZmllbGRzLCBzbyBhIGNvbHVtblxuICAgICAgLy8gdHlwZSBjaGFuZ2Ugc2hvdWxkIG5vdCByZWNvbmNpbGUgdGhlbSBhZ2FpbnN0IHRoZSBmaWVsZCBsaXN0LlxuICAgICAgaWYgKGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbikge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG4gICAgICBjb25zdCBuZXh0RmlsdGVyVHlwZSA9IGZpZWxkSWR4ID09PSAtMSA/IG51bGwgOiBuZXdUYWJsZS5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhuZXdOYW1lKT8udHlwZTtcblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZElkeCA9PT0gLTEgfHxcbiAgICAgICAgKGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSAmJiBuZXh0RmlsdGVyVHlwZSAmJiBuZXh0RmlsdGVyVHlwZSAhPT0gZmlsdGVyLnR5cGUpXG4gICAgICApIHtcbiAgICAgICAgLy8gRHJvcCBhIG1pc3NpbmcgZmllbGQgb3IgZGV0YWNoIGFuIGluY29tcGF0aWJsZSBzeW5jZWQgbWVtYmVyLlxuICAgICAgICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXIuZGF0YUlkLmZvckVhY2goaWQgPT4gZGF0YXNldElkc1RvUmVmaWx0ZXIuYWRkKGlkKSk7XG4gICAgICAgIGNvbnN0IGRldGFjaGVkRmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICAgIHJldHVybiB2aSA9PT0gMFxuICAgICAgICAgID8gcmVjb25jaWxlVGltZWxpbmVQbG90QWZ0ZXJQcmltYXJ5UmVtb3ZhbChkZXRhY2hlZEZpbHRlciwgbmV3RGF0YXNldHMpXG4gICAgICAgICAgOiBkZXRhY2hlZEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gY29sdW1uIHByZXNlbnQgKHBvc3NpYmx5IHJlbmFtZWQpOiByZS1yZXNvbHZlIG5hbWUvZmllbGRJZHgvZG9tYWluXG4gICAgICBsZXQge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbGVhdmluZ1RpbWVGaWx0ZXIgPVxuICAgICAgICBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiB1cGRhdGVkLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U7XG5cbiAgICAgIGNvbnN0IG9sZEVuZE5hbWUgPSB0b0FycmF5KChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5lbmROYW1lKVt2aV07XG4gICAgICBpZiAodXBkYXRlZC50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIG9sZEVuZE5hbWUpIHtcbiAgICAgICAgY29uc3QgZW5kTmFtZSA9IHJlbmFtZXNbb2xkRW5kTmFtZV0gPz8gb2xkRW5kTmFtZTtcbiAgICAgICAgdXBkYXRlZCA9XG4gICAgICAgICAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKHVwZGF0ZWQsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIGVuZE5hbWUsIHZpKS5maWx0ZXIgPz9cbiAgICAgICAgICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUodXBkYXRlZCwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbnVsbCwgdmkpLmZpbHRlciA/P1xuICAgICAgICAgIHVwZGF0ZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRpbWUgcGxvdHMgb25seSBhY2NlcHQgbnVtZXJpYyB5LWF4aXMgZmllbGRzLiBSZS1yZXNvbHZlIHRoZSBjb21wbGV0ZVxuICAgICAgLy8gZmllbGQgc28gdHlwZSBhbmQgZmllbGRJZHggYWxzbyBmb2xsb3cgYSBzY2hlbWEgY2hhbmdlLlxuICAgICAgbGV0IHlBeGlzID0gdXBkYXRlZC55QXhpcztcbiAgICAgIGlmICh2aSA9PT0gMCAmJiB1cGRhdGVkLnlBeGlzPy5uYW1lKSB7XG4gICAgICAgIGNvbnN0IHlBeGlzTmFtZSA9IHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXSA/PyB1cGRhdGVkLnlBeGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHlBeGlzRmllbGQgPSBuZXdGaWVsZHNCeU5hbWUuZ2V0KHlBeGlzTmFtZSk7XG4gICAgICAgIHlBeGlzID0geUF4aXNGaWVsZCAmJiBGSUxURVJfUExPVF9ZX0FYSVNfVFlQRVMuaGFzKHlBeGlzRmllbGQudHlwZSkgPyB5QXhpc0ZpZWxkIDogbnVsbDtcbiAgICAgIH1cblxuICAgICAgbGV0IG5leHRGaWx0ZXIgPSB7XG4gICAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAgIHlBeGlzLFxuICAgICAgICAuLi4odXBkYXRlZC55QXhpcyAmJiAheUF4aXNcbiAgICAgICAgICA/IHtwbG90VHlwZTogey4uLnVwZGF0ZWQucGxvdFR5cGUsIHR5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtfX1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgICAgaWYgKGxlYXZpbmdUaW1lRmlsdGVyKSB7XG4gICAgICAgIG5leHRGaWx0ZXIgPSBjbGVhclRpbWVsaW5lRmlsdGVyU3RhdGUobmV4dEZpbHRlcik7XG4gICAgICB9IGVsc2UgaWYgKHZpID09PSAwICYmIG5leHRGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgICAgICBjb25zdCBncm91cEJ5ID0gbmV4dEZpbHRlci5wbG90VHlwZS5ncm91cEJ5O1xuICAgICAgICBpZiAoZ3JvdXBCeSAmJiByZW5hbWVzW2dyb3VwQnkuZmllbGROYW1lXSkge1xuICAgICAgICAgIG5leHRGaWx0ZXIucGxvdFR5cGUgPSB7XG4gICAgICAgICAgICAuLi5uZXh0RmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgICAgZ3JvdXBCeTogey4uLmdyb3VwQnksIGZpZWxkTmFtZTogcmVuYW1lc1tncm91cEJ5LmZpZWxkTmFtZV19XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaW1lbGluZSBiaW5zIGNhbiByZW1haW4gaWRlbnRpY2FsIHdoaWxlIHktYXhpcyBvciBncm91cC1ieSB2YWx1ZXNcbiAgICAgICAgLy8gY2hhbmdlLCBzbyBkbyBub3QgcmV1c2UgdGhlIG9sZCBzZXJpZXMgY2FjaGUgYWZ0ZXIgYSBkYXRhIHJlYnVpbGQuXG4gICAgICAgIG5leHRGaWx0ZXIgPSB7Li4ubmV4dEZpbHRlciwgbGluZUNoYXJ0OiB1bmRlZmluZWR9O1xuICAgICAgfVxuICAgICAgLy8gS2VlcCBleGlzdGluZyBwbG90czsgdGltZSBwbG90cyBhcmUgcmVidWlsdCBhZnRlciBmaWx0ZXJpbmcgYmVsb3cuXG4gICAgICByZXR1cm4gZmlsdGVyLnR5cGUgPT09IG5leHRGaWx0ZXIudHlwZSB8fCBuZXh0RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2VcbiAgICAgICAgPyBuZXh0RmlsdGVyXG4gICAgICAgIDogdXBkYXRlRmlsdGVyUGxvdChuZXdEYXRhc2V0cywgbmV4dEZpbHRlciwgZGF0YUlkLCBzdGF0ZS5sYXllcnMpO1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyAzLiByZWNvbmNpbGUgbGF5ZXJzXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllcnMgPSBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IHJlY29uY2lsZWQgPSByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEobGF5ZXIsIHJlbmFtZXMsIG5ld1RhYmxlLCBzdGF0ZSk7XG4gICAgaWYgKHJlY29uY2lsZWQpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVkO1xuICAgIH1cbiAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyLmlkKTtcbiAgICByZXR1cm4gbGF5ZXI7IC8vIHBsYWNlaG9sZGVyLCBkcm9wcGVkIHZpYSByZW1vdmVMYXllclVwZGF0ZXIgYmVsb3dcbiAgfSk7XG5cbiAgLy8gUG9seWdvbiBmaWx0ZXJzIHJlZmVyZW5jZSBsYXllcnMsIG5vdCBmaWVsZHMuIFByZXNlcnZlIHRoZW0gZm9yIHNjaGVtYVxuICAvLyBlZGl0cyB0aGF0IGtlZXAgdGhlaXIgdGFyZ2V0IGxheWVycywgYnV0IHJlbW92ZSBpbnZhbGlkIHRhcmdldHMgYmVmb3JlXG4gIC8vIHJlYnVpbGRpbmcgZmlsdGVyIHJlY29yZHMgd2hlbiBhIHJlcXVpcmVkIGxheWVyIGNvbHVtbiB3YXMgZGVsZXRlZC5cbiAgY29uc3QgcmVtb3ZlZExheWVySWRzID0gbmV3IFNldChsYXllcnNUb1JlbW92ZSk7XG4gIGlmIChyZW1vdmVkTGF5ZXJJZHMuc2l6ZSkge1xuICAgIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLmZsYXRNYXAoZmlsdGVyID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uIHx8XG4gICAgICAgICFmaWx0ZXIubGF5ZXJJZD8uc29tZShpZCA9PiByZW1vdmVkTGF5ZXJJZHMuaGFzKGlkKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gW2ZpbHRlcl07XG4gICAgICB9XG4gICAgICBmaWx0ZXIuZGF0YUlkLmZvckVhY2goaWQgPT4gZGF0YXNldElkc1RvUmVmaWx0ZXIuYWRkKGlkKSk7XG4gICAgICBjb25zdCBsYXllcklkID0gZmlsdGVyLmxheWVySWQuZmlsdGVyKGlkID0+ICFyZW1vdmVkTGF5ZXJJZHMuaGFzKGlkKSk7XG4gICAgICByZXR1cm4gbGF5ZXJJZC5sZW5ndGggPyBbey4uLmZpbHRlciwgbGF5ZXJJZH1dIDogW107XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWQuXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gNC4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgdXNpbmcgb25seSBsYXllcnMgdGhhdCB3aWxsIHN1cnZpdmVcbiAgY29uc3Qgc3Vydml2aW5nTGF5ZXJzID0gbmV3TGF5ZXJzLmZpbHRlcihsYXllciA9PiAhcmVtb3ZlZExheWVySWRzLmhhcyhsYXllci5pZCkpO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBBcnJheS5mcm9tKGRhdGFzZXRJZHNUb1JlZmlsdGVyKSxcbiAgICBuZXdEYXRhc2V0cyxcbiAgICBuZXdGaWx0ZXJzLFxuICAgIHN1cnZpdmluZ0xheWVyc1xuICApO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgZmlsdGVyczogbmV3RmlsdGVycyxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBjaGFydHM6IHJlbWFwQ2hhcnRzRm9yRGF0YXNldChzdGF0ZS5jaGFydHMsIGRhdGFJZCwgcmVuYW1lcywgbmV3RmllbGRzQnlOYW1lKVxuICB9O1xuXG4gIC8vIDYuIGRyb3AgbGF5ZXJzIHRoYXQgbG9zdCB0aGVpciByZXF1aXJlZCBjb2x1bW5zXG4gIG5leHRTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwgbmV4dFN0YXRlKTtcblxuICAvLyBGaWx0ZXJpbmcgYW5kIHBvbHlnb24tbGF5ZXIgcmVtb3ZhbCBjYW4gY2hhbmdlIHRoZSByb3dzIGJlaGluZCB0aW1lbGluZVxuICAvLyBwbG90cywgc28gcmVidWlsZCB0aGVpciBjYWNoZWQgYmlucy9zZXJpZXMgZnJvbSB0aGUgcmVjb25jaWxlZCBzdGF0ZS5cbiAgbmV4dFN0YXRlID0gdXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyhuZXh0U3RhdGUsIEFycmF5LmZyb20oZGF0YXNldElkc1RvUmVmaWx0ZXIpKTtcblxuICAvLyA3LiByZWNvbXB1dGUgbGF5ZXIgZG9tYWlucyArIGRhdGEgZm9yIHRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhIGNvbHVtbidzIHN0b3JlZCBpZGVudGl0eSAoYGZpZWxkLm5hbWVgKSBhbmQgZXZlcnkgbGF5ZXIsIGZpbHRlcixcbiAqIHRvb2x0aXAsIGFuZCBjaGFydCByZWZlcmVuY2UgdGhhdCB1c2VkIHRoZSBvbGQgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZmllbGROYW1lLCBuZXdOYW1lfSA9IGFjdGlvbjtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCAhY2FuTXV0YXRlRGF0YXNldFNjaGVtYShkYXRhc2V0KSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gYnVpbGRSZW5hbWVDb2x1bW5EYXRhKGRhdGFzZXQsIGZpZWxkTmFtZSwgbmV3TmFtZSk7XG4gIGlmICghcGF5bG9hZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhSWQsXG4gICAgZGF0YTogcGF5bG9hZC5kYXRhLFxuICAgIHJlbmFtZXM6IHBheWxvYWQucmVuYW1lc1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgY29tcGxldGUgY29sdW1uIGJlZm9yZSBjb21taXR0aW5nIGl0cyBuZXcgdHlwZS4gQSBmYWlsZWQgdmFsdWVcbiAqIGxlYXZlcyB0aGUgdGFibGUgYW5kIGV2ZXJ5IHJlZmVyZW5jZSB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VUYWJsZUNvbHVtblR5cGVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZmllbGROYW1lLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCAhY2FuTXV0YXRlRGF0YXNldFNjaGVtYShkYXRhc2V0KSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhKGRhdGFzZXQsIGZpZWxkTmFtZSwgbmV3VHlwZSk7XG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIGlkOiBgY29sdW1uLXR5cGUtJHtkYXRhSWR9LSR7ZmllbGROYW1lfWAsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2Fubm90IGNoYW5nZSDigJwke2ZpZWxkTmFtZX3igJ0gdG8gJHtuZXdUeXBlfTogJHtmb3JtYXRDb2x1bW5UeXBlQ29udmVyc2lvbkVycm9yKFxuICAgICAgICAgICAgICByZXN1bHQuZXJyb3JcbiAgICAgICAgICAgICl9LiBObyB2YWx1ZXMgd2VyZSBjaGFuZ2VkLmBcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhSWQsXG4gICAgZGF0YTogcmVzdWx0LnBheWxvYWQuZGF0YSxcbiAgICByZW5hbWVzOiByZXN1bHQucGF5bG9hZC5yZW5hbWVzXG4gIH0pO1xufVxuXG4vKipcbiAqIERyb3AgYSBjb2x1bW4gYW5kIHRoZSBsYXllcnMsIGZpbHRlcnMsIGFuZCBvdGhlciByZWZlcmVuY2VzIHRoYXQgcmVxdWlyZWQgaXQuXG4gKiBUaGUgbGFzdCByZW1haW5pbmcgY29sdW1uIGlzIGtlcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGZpZWxkTmFtZX0gPSBhY3Rpb247XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgIWNhbk11dGF0ZURhdGFzZXRTY2hlbWEoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IGJ1aWxkRGVsZXRlQ29sdW1uRGF0YShkYXRhc2V0LCBmaWVsZE5hbWUpO1xuICBpZiAoIXBheWxvYWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YUlkLFxuICAgIGRhdGE6IHBheWxvYWQuZGF0YSxcbiAgICByZW5hbWVzOiBwYXlsb2FkLnJlbmFtZXNcbiAgfSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmxldCBuZXh0RmlsZUxvYWRJZCA9IDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbGVMb2FkSWQoKTogbnVtYmVyIHtcbiAgY29uc3QgbG9hZElkID0gbmV4dEZpbGVMb2FkSWQ7XG4gIG5leHRGaWxlTG9hZElkICs9IDE7XG4gIHJldHVybiBsb2FkSWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaEZpbGVMb2FkKFxuICBvbkZpbmlzaDogKHBheWxvYWQ6IGFueSwgb3B0aW9ucz86IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNPcHRpb25zKSA9PiBhbnksXG4gIGZpbGVDYWNoZTogYW55W10sXG4gIG9wdGlvbnM6IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNPcHRpb25zIHwgdW5kZWZpbmVkLFxuICBsb2FkSWQ6IG51bWJlclxuKSB7XG4gIGNvbnN0IGFjdGlvbiA9IG9wdGlvbnMgPyBvbkZpbmlzaChmaWxlQ2FjaGUsIG9wdGlvbnMpIDogb25GaW5pc2goZmlsZUNhY2hlKTtcbiAgcmV0dXJuIHsuLi5hY3Rpb24sIGxvYWRJZH07XG59XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3MsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gQXJyYXkuZnJvbShmaWxlcyk7XG4gIGNvbnN0IGZpbGVzVG9Mb2FkID0gZ2V0RmlsZXNUb1BhcnNlKGNvbXBhbmlvbkZpbGVzKTtcblxuICAvLyBBbm90aGVyIGRyb3Agd2hpbGUgYSBkZWZlcnJlZCBwYXJzZSBpcyBydW5uaW5nIG11c3Qgam9pbiB0aGF0IGxvYWQuXG4gIC8vIFJlcGxhY2luZyBgZmlsZUxvYWRpbmdgIG1ha2VzIHRoZSBpbi1mbGlnaHQgZmlsZSBmaW5pc2ggYWdhaW5zdCB0aGUgbmV3XG4gIC8vIGNhY2hlIGFuZCBkcm9wIHRoZSBmaWxlcyB0aGF0IHdlcmUgYWxyZWFkeSBiZWluZyBwYXJzZWQuXG4gIGlmIChzdGF0ZS5maWxlTG9hZGluZyAmJiBzdGF0ZS5maWxlTG9hZGluZy5vcHRpb25zPy5kZWZlckFkZFRvTWFwICYmIG9wdGlvbnM/LmRlZmVyQWRkVG9NYXApIHtcbiAgICByZXR1cm4gYXBwZW5kRGVmZXJyZWRGaWxlTG9hZChzdGF0ZSwge2ZpbGVzVG9Mb2FkLCBjb21wYW5pb25GaWxlc30pO1xuICB9XG5cbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBBIGRlZmVycmVkIGxvYWQgaXMgYW5vdGhlciBiYXRjaCBmb3IgdGhlIHNhbWUgQWRkIERhdGEgY2xpY2suIEtlZXAgZmlsZXNcbiAgLy8gYWxyZWFkeSBzdGFnZWQsIGFuZCBrZWVwIHRoZWlyIGVycm9yIGNhcmRzLCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIG92ZXIuXG4gIGNvbnN0IHByZXZpb3VzRXJyb3JzID1cbiAgICBvcHRpb25zPy5kZWZlckFkZFRvTWFwICYmIHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NcbiAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MpLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZT8uZXJyb3IpXG4gICAgICAgIClcbiAgICAgIDoge307XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICBwcmV2aW91c0Vycm9yc1xuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGxvYWRJZDogY3JlYXRlRmlsZUxvYWRJZCgpLFxuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgb25GaW5pc2gsXG4gICAgLi4uKG9wdGlvbnMgPyB7b3B0aW9uc30gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe1xuICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gICAgZmlsZUxvYWRpbmcsXG4gICAgLi4uKG9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgPyB7fSA6IHtzdGFnZWRUb0FkZDogbnVsbH0pXG4gIH0pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBkcm9wIHRvIHRoZSBkZWZlcnJlZCBsb2FkIHRoYXQgaXMgYWxyZWFkeSBwYXJzaW5nLlxuICogVGhlIGN1cnJlbnQgZmlsZSBrZWVwcyBpdHMgY2FjaGU7IHRoZSBuZXcgZmlsZXMgcnVuIGFmdGVyIGl0LlxuICovXG5mdW5jdGlvbiBhcHBlbmREZWZlcnJlZEZpbGVMb2FkKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlc1xuICB9OiB7XG4gICAgZmlsZXNUb0xvYWQ6IEZpbGVbXTtcbiAgICBjb21wYW5pb25GaWxlczogRmlsZVtdO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxvYWRpbmcgPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFsb2FkaW5nIHx8ICghZmlsZXNUb0xvYWQubGVuZ3RoICYmICFjb21wYW5pb25GaWxlcy5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZmlsZSwgaW5kZXgpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkpKGFjY3UpLFxuICAgIHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gICAgZmlsZUxvYWRpbmc6IHtcbiAgICAgIC4uLmxvYWRpbmcsXG4gICAgICBmaWxlc1RvTG9hZDogWy4uLkFycmF5LmZyb20obG9hZGluZy5maWxlc1RvTG9hZCksIC4uLmZpbGVzVG9Mb2FkXSxcbiAgICAgIGNvbXBhbmlvbkZpbGVzOiBbLi4uKGxvYWRpbmcuY29tcGFuaW9uRmlsZXMgfHwgW10pLCAuLi5jb21wYW5pb25GaWxlc11cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IGxvYWRJZCA9IHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZDtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICAvLyBEZWNpZGUgYWZ0ZXIgdGhlIHBhdXNlLCBhbmQgb25seSBmb3IgdGhpcyBsb2FkLiBBIGRyb3AgZHVyaW5nIHRoZXNlXG4gIC8vIDIwMG1zIGpvaW5zIHRoZSBxdWV1ZTsgY2FuY2VsIG9yIGEgbmV3ZXIgbG9hZCBtYWtlcyB0aGlzIGNvbnRpbnVhdGlvbiBzdGFsZS5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoKCkgPT4gbG9hZE5leHRGaWxlKGxvYWRJZCkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSwgYWN0aW9uPzoge2xvYWRJZD86IG51bWJlcn0pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxvYWRJZCA9IGFjdGlvbj8ubG9hZElkO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nIHx8IChsb2FkSWQgIT0gbnVsbCAmJiBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQgIT09IGxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlLCBvcHRpb25zLCBsb2FkSWQ6IGN1cnJlbnRMb2FkSWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiBmaW5pc2hGaWxlTG9hZChvbkZpbmlzaCwgZmlsZUNhY2hlLCBvcHRpb25zLCBjdXJyZW50TG9hZElkKSlcbiAgICApO1xuICB9XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgaWYgKGlzWmlwRmlsZU5hbWUoZmlsZS5uYW1lKSkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgICAgRVhQQU5EX1pJUF9UQVNLKHtmaWxlLCBleHRlbnNpb25zOiBkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzKGxvYWRlcnMpfSkuYmltYXAoXG4gICAgICAgIGV4cGFuc2lvbiA9PlxuICAgICAgICAgIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzKHtcbiAgICAgICAgICAgIGxvYWRJZDogY3VycmVudExvYWRJZCxcbiAgICAgICAgICAgIGFyY2hpdmVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICBleHBhbnNpb25cbiAgICAgICAgICB9KSxcbiAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVyciwgY3VycmVudExvYWRJZClcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nID8gbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmNvbXBhbmlvbkZpbGVzIDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZGF0YXNldEV4dGVuc2lvbnNGcm9tTG9hZGVycyhcbiAgbG9hZGVyczogQXJyYXk8e2V4dGVuc2lvbnM/OiByZWFkb25seSBzdHJpbmdbXX0+ID0gW11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgZm9yIChjb25zdCBleHRlbnNpb24gb2YgbG9hZGVyPy5leHRlbnNpb25zIHx8IFtdKSB7XG4gICAgICBjb25zdCBleHQgPSBTdHJpbmcoZXh0ZW5zaW9uKS5yZXBsYWNlKC9eXFwuLywgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFleHQgfHwgZXh0ID09PSAnemlwJyB8fCBzZWVuLmhhcyhleHQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoZXh0KTtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXh0ZW5zaW9ucztcbn1cblxuZnVuY3Rpb24gY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlKGV4cGFuc2lvbjogWmlwQXJjaGl2ZUV4cGFuc2lvbiwgZXhpc3Rpbmc/OiBGaWxlW10pOiBGaWxlW10ge1xuICBjb25zdCBleHRyYWN0ZWQgPVxuICAgIGV4cGFuc2lvbi5raW5kID09PSAnc2hhcGVmaWxlJ1xuICAgICAgPyBbZXhwYW5zaW9uLnNoYXBlZmlsZSwgLi4uZXhwYW5zaW9uLmNvbXBhbmlvbnNdXG4gICAgICA6IFsuLi5leHBhbnNpb24uZGF0YXNldHMsIC4uLmV4cGFuc2lvbi5jb21wYW5pb25zXTtcbiAgcmV0dXJuIFsuLi5leHRyYWN0ZWQsIC4uLihleGlzdGluZyB8fCBbXSldO1xufVxuXG5mdW5jdGlvbiB3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5KFxuICBwcm9ncmVzczogVmlzU3RhdGVbJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnXSxcbiAgZmlsZU5hbWU6IHN0cmluZ1xuKTogVmlzU3RhdGVbJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnXSB7XG4gIGlmICghcHJvZ3Jlc3MgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9ncmVzcywgZmlsZU5hbWUpKSB7XG4gICAgcmV0dXJuIHByb2dyZXNzO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4ucHJvZ3Jlc3N9O1xuICBkZWxldGUgbmV4dFtmaWxlTmFtZV07XG4gIHJldHVybiBuZXh0O1xufVxuXG4vKipcbiAqIEFwcGx5IGFuIHVucGFja2VkIHppcC4gT25lIHNoYXBlZmlsZSBrZWVwcyB0aGUgYXJjaGl2ZSBuYW1lLiBBbnkgb3RoZXJcbiAqIG1peCBpcyBxdWV1ZWQgYXMgb25lIGRhdGFzZXQgcGVyIHN1cHBvcnRlZCBtZW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRaaXBBcmNoaXZlU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuRXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWxvYWRpbmcgfHwgbG9hZGluZy5sb2FkSWQgIT09IGFjdGlvbi5sb2FkSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2FyY2hpdmVOYW1lLCBleHBhbnNpb259ID0gYWN0aW9uO1xuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IGNvbXBhbmlvbkZpbGVzRm9yQXJjaGl2ZShleHBhbnNpb24sIGxvYWRpbmcuY29tcGFuaW9uRmlsZXMpO1xuXG4gIGlmIChleHBhbnNpb24ua2luZCA9PT0gJ3NoYXBlZmlsZScpIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2NvbXBhbmlvbkZpbGVzfSkpKHN0YXRlKTtcbiAgICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgbmV4dFN0YXRlLFxuICAgICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgICAgZXhwYW5zaW9uLnNoYXBlZmlsZSxcbiAgICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICAgIGxvYWRlcnMsXG4gICAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgICBjb21wYW5pb25GaWxlcyxcbiAgICAgICAgbG9hZGluZy5vcHRpb25zLFxuICAgICAgICBhcmNoaXZlTmFtZVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IGV4cGFuc2lvbi5kYXRhc2V0cztcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBbLi4uZGF0YXNldHMsIC4uLkFycmF5LmZyb20obG9hZGluZy5maWxlc1RvTG9hZCldO1xuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZGF0YXNldHMucmVkdWNlKFxuICAgIChhY2N1LCBmaWxlLCBpbmRleCkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSkoYWNjdSksXG4gICAgd2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeShzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzLCBhcmNoaXZlTmFtZSlcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gICAgZmlsZUxvYWRpbmc6IHtcbiAgICAgIC4uLmxvYWRpbmcsXG4gICAgICBmaWxlc1RvTG9hZCxcbiAgICAgIGNvbXBhbmlvbkZpbGVzXG4gICAgfVxuICB9O1xuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUsIHtsb2FkSWQ6IGFjdGlvbi5sb2FkSWR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soXG4gIGZpbGUsXG4gIGZpbGVDYWNoZSxcbiAgbG9hZGVyczogTG9hZGVyW10gPSBbXSxcbiAgbG9hZE9wdGlvbnMgPSB7fSxcbiAgY29tcGFuaW9uRmlsZXM/OiBGaWxlW10sXG4gIGFkZERhdGFPcHRpb25zPzogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMsXG4gIGZpbGVOYW1lPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBmaWxlTmFtZSB8fCBmaWxlLm5hbWU7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7XG4gICAgZmlsZSxcbiAgICBmaWxlQ2FjaGUsXG4gICAgbG9hZGVycyxcbiAgICBsb2FkT3B0aW9ucyxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICAuLi4oZmlsZU5hbWUgPyB7ZmlsZU5hbWV9IDoge30pXG4gIH0pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgLi4uKGFkZERhdGFPcHRpb25zPy5kZWZlckFkZFRvTWFwICYmIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmdcbiAgICAgICAgICAgICAgICA/IHtwcmVwYXJlUHJvZ3Jlc3NpdmVSZXBsYXk6IHRydWV9XG4gICAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KSxcbiAgICAgICAgLi4uKGFkZERhdGFPcHRpb25zID8ge29wdGlvbnM6IGFkZERhdGFPcHRpb25zfSA6IHt9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZGlzcGxheU5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNoLCBvcHRpb25zfVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgY29uc3QgZGVmZXJBZGRUb01hcCA9IEJvb2xlYW4ob3B0aW9ucz8uZGVmZXJBZGRUb01hcCk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICAhZGVmZXJBZGRUb01hcCAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gKG9wdGlvbnMgPyBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCwgb3B0aW9ucykgOiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCkpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoLFxuICAgICAgICAgICAgICAuLi4ob3B0aW9ucyA/IHtvcHRpb25zfSA6IHt9KVxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgXSk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vKipcbiAqIERyb3AgZmlsZXMgd2FpdGluZyBvbiB0aGUgQWRkIERhdGEgYnV0dG9uIGFuZCBhYm9ydCBhbiBpbi1wcm9ncmVzcyBtb2RhbCBsb2FkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyU3RhZ2VkTG9hZGVkRmlsZXNVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBzdGFnZWRUb0FkZDogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWUsIGxvYWRJZDogZXJyb3JMb2FkSWR9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nIHx8IChlcnJvckxvYWRJZCAhPSBudWxsICYmIHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gZXJyb3JMb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgY29uc3QgbG9hZElkID0gc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8gU2FtZSBwYXVzZSBhcyBhIHN1Y2Nlc3NmdWwgZmlsZS4gUmUtY2hlY2sgdGhpcyBsb2FkJ3MgcXVldWUgd2hlbiBpdCBlbmRzLlxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoKCkgPT4gbG9hZE5leHRGaWxlKGxvYWRJZCkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFwcGx5IGNwdUZpbHRlclxuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhSWQpO1xuXG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjdSwgaWQpID0+IGZpbHRlckRhdGFzZXRDUFUoYWNjdSwgaWQpLCBzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVzZXIgaW5wdXQgdG8gdXBkYXRlIHRoZSBpbmZvIG9mIHRoZSBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBJbmZvVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRNYXBJbmZvVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXh0ID0gey4uLnN0YXRlLm1hcEluZm8sIC4uLmFjdGlvbi5pbmZvfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBJbmZvOiB7XG4gICAgICB0aXRsZTogb3B0aW9uYWxNYXBUZXh0KG5leHQudGl0bGUpLFxuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbmFsTWFwVGV4dChuZXh0LmRlc2NyaXB0aW9uKVxuICAgIH1cbiAgfTtcbn07XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVUYWJsZUNvbHVtbkhpZGRlblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZVRhYmxlQ29sdW1uSGlkZGVuVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHRvZ2dsZUhpZGRlblRhYmxlQ29sdW1uKGRhdGFzZXQsIGNvbHVtbiksIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvd0FsbFRhYmxlQ29sdW1uc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5TaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNob3dBbGxUYWJsZUNvbHVtbnMoZGF0YXNldCksIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Db3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge3R5cGV9ID0gZGF0YXNldC5maWVsZHNbZmllbGRJZHhdO1xuICBjb25zdCB0ZXh0ID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChyb3cgPT4gcGFyc2VGaWVsZFZhbHVlKHJvdy52YWx1ZUF0KGZpZWxkSWR4KSwgdHlwZSksIHRydWUpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvcHkodGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFNldCBkaXNwbGF5IGZvcm1hdCBmcm9tIGNvbHVtbnMgZnJvbSB1c2VyIHNlbGVjdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZvcm1hdHN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHM7XG4gIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgICBpZiAoZmllbGRJZHggPj0gMCkge1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGZvcm1hdHNbY29sdW1uXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gbmV3RmllbGRzW2ZpZWxkSWR4XTtcbiAgICAgIG5ld0ZpZWxkcyA9IHN3YXBfKG1lcmdlXyh7ZGlzcGxheUZvcm1hdH0pKGZpZWxkKSBhcyB7aWQ6IHN0cmluZ30pKFxuICAgICAgICBuZXdGaWVsZHMgYXMge2lkOiBzdHJpbmd9W11cbiAgICAgICkgYXMgRmllbGRbXTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzIGFzIEZpZWxkW119KTtcbiAgbGV0IG5ld1N0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG4gIGNvbnN0IHRleHRMYWJlbExheWVySW5kZXhlczogbnVtYmVyW10gPSBbXTtcblxuICAvLyBMYXllciBjb25maWdzIHJldGFpbiB0aGVpciBvd24gZmllbGQgb2JqZWN0cywgc28ga2VlcCB0aG9zZSBjb3BpZXMgaW4gc3luY1xuICAvLyB3aXRoIHRoZSBkaXNwbGF5IGZvcm1hdCBzdG9yZWQgb24gdGhlIGRhdGFzZXQgZmllbGQuXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcCgobGF5ZXIsIGxheWVySW5kZXgpID0+IHtcbiAgICAgIC8vIENvbHVtbiBuYW1lcyBhcmUgbm90IHVuaXF1ZSBhY3Jvc3MgZGF0YXNldHMuIE9ubHkgdXBkYXRlIGxheWVycyB0aGF0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGRhdGFzZXQgdGFyZ2V0ZWQgYnkgdGhpcyBhY3Rpb24uXG4gICAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sb3JGaWVsZCA9IGxheWVyLmNvbmZpZz8uY29sb3JGaWVsZDtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDb2xvckZpZWxkID1cbiAgICAgICAgY29sb3JGaWVsZD8ubmFtZSAmJiBjb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICAgID8gey4uLmNvbG9yRmllbGQsIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbY29sb3JGaWVsZC5uYW1lXX1cbiAgICAgICAgICA6IG51bGw7XG4gICAgICAvLyBUZXh0IGxhYmVscyBhbHNvIGtlZXAgZmllbGQgY29waWVzIGluc3RlYWQgb2YgcmVhZGluZyBkYXRhc2V0LmZpZWxkcyBhdCByZW5kZXIgdGltZS5cbiAgICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKGxhYmVsID0+IHtcbiAgICAgICAgY29uc3Qge2ZpZWxkfSA9IGxhYmVsO1xuICAgICAgICByZXR1cm4gZmllbGQ/Lm5hbWUgJiYgZmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgICAgPyB7Li4ubGFiZWwsIGZpZWxkOiB7Li4uZmllbGQsIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbZmllbGQubmFtZV19fVxuICAgICAgICAgIDogbGFiZWw7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVwZGF0ZVRleHRMYWJlbCA9IHRleHRMYWJlbC5zb21lKFxuICAgICAgICAobGFiZWwsIGluZGV4KSA9PiBsYWJlbCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpbmRleF1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlVGV4dExhYmVsKSB7XG4gICAgICAgIHRleHRMYWJlbExheWVySW5kZXhlcy5wdXNoKGxheWVySW5kZXgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlZENvbG9yRmllbGQgfHwgdXBkYXRlVGV4dExhYmVsXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgLi4uKHVwZGF0ZWRDb2xvckZpZWxkID8ge2NvbG9yRmllbGQ6IHVwZGF0ZWRDb2xvckZpZWxkfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLih1cGRhdGVUZXh0TGFiZWwgPyB7dGV4dExhYmVsfSA6IHt9KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXI7XG4gICAgfSlcbiAgfTtcblxuICBpZiAodGV4dExhYmVsTGF5ZXJJbmRleGVzLmxlbmd0aCkge1xuICAgIC8vIExhYmVsIGFjY2Vzc29ycyBhbmQgY2hhcmFjdGVyIHNldHMgYXJlIGNhY2hlZCBpbiBsYXllckRhdGEuIFJlYnVpbGQgdGhlbVxuICAgIC8vIGltbWVkaWF0ZWx5IHNvIHRoZSBuZXcgZm9ybWF0IGFwcGVhcnMgd2l0aG91dCByZW1vdmluZyBhbmQgcmUtYWRkaW5nIHRoZSBsYWJlbCBmaWVsZC5cbiAgICBjb25zdCBsYXllcnMgPSBuZXdTdGF0ZS5sYXllcnMuc2xpY2UoKTtcbiAgICBjb25zdCBsYXllckRhdGEgPSBuZXdTdGF0ZS5sYXllckRhdGEuc2xpY2UoKTtcbiAgICB0ZXh0TGFiZWxMYXllckluZGV4ZXMuZm9yRWFjaChsYXllckluZGV4ID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllcnNbbGF5ZXJJbmRleF0sIG5ld1N0YXRlLCBsYXllckRhdGFbbGF5ZXJJbmRleF0pO1xuICAgICAgbGF5ZXJzW2xheWVySW5kZXhdID0gcmVzdWx0LmxheWVyO1xuICAgICAgbGF5ZXJEYXRhW2xheWVySW5kZXhdID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgICB9KTtcbiAgICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgbGF5ZXJzLCBsYXllckRhdGF9O1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PlxuICAgICAgICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcywge1xuICAgICAgICAgIGZpZWxkVHlwZTogZi50eXBlXG4gICAgICAgIH0pLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT5cbiAgICAgICAgbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvciwge1xuICAgICAgICAgIGZpZWxkVHlwZTogZi50eXBlXG4gICAgICAgIH0pXG4gICAgKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICByZXR1cm4gd2l0aFRhc2sobmV4dFN0YXRlLCB0YXNrcyk7XG59XG5cbi8qKlxuICogUGVyc2lzdCBsb2FkZWQgY29sdW1uIHN0YXRpc3RpY3Mgb24gdGhlIGZpZWxkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICByZXN1bHQsXG4gICAgZmlsdGVyUHJvcHMsXG4gICAgZGF0YUlkLFxuICAgIGZpZWxkTmFtZSxcbiAgICBmaWVsZFR5cGVcbiAgfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQgfHwgKGZpZWxkVHlwZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnR5cGUgIT09IGZpZWxkVHlwZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZSwgZmllbGRUeXBlfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkIHx8IChmaWVsZFR5cGUgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC50eXBlICE9PSBmaWVsZFR5cGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIENvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb3B5IGluLW1lbW9yeSByb3dzIChvciBsb2FkZWQgdmVjdG9yLXRpbGUgZmVhdHVyZXMpIGluc2lkZSB0aGUgc2VsZWN0ZWRcbiAqIERyYXcgb24gTWFwIHBvbHlnb24gaW50byBhIG5ldyBkYXRhc2V0LiBSYXN0ZXIgdGlsZXMgZG93bmxvYWQgYSBQTkcgY2xpcCBhbmQgYVxuICogR2VvSlNPTiBzaWRlY2FyIChiYm94IHJlY3RhbmdsZSArIHN0YXRzKSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgZGF0YXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLkV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZlYXR1cmUgPSBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVyPy5jb25maWcuZGF0YUlkO1xuICBsZXQgZGF0YXNldCA9IGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiBudWxsO1xuXG4gIGlmICghbGF5ZXIgfHwgIWRhdGFzZXQgfHwgIWRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGlzVGlsZWRFeHRyYWN0ID0gaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKSB8fCBpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpO1xuXG4gIC8vIEdQVSByYW5nZS90aW1lIGZpbHRlcnMgYXJlIG5vdCByZWZsZWN0ZWQgaW4gZmlsdGVyZWRJbmRleDsgZXZhbHVhdGUgdGhlbSBvbiBDUFVcbiAgLy8gdGhlIHNhbWUgd2F5IGV4cG9ydCBkYXRhIGRvZXMsIHRoZW4gY2xpcCB0aGUgcmVzdWx0IHRvIHRoZSBkcmF3aW5nLlxuICBpZiAoIWlzVGlsZWRFeHRyYWN0KSB7XG4gICAgc3RhdGUgPSBmaWx0ZXJEYXRhc2V0Q1BVKHN0YXRlLCBkYXRhSWQpO1xuICAgIGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICAgIGlmICghZGF0YXNldCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBleHRyYWN0ZWQ7XG4gIHRyeSB7XG4gICAgZXh0cmFjdGVkID0gZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlKHtsYXllciwgZGF0YXNldCwgZmVhdHVyZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZC5yb3dDb3VudCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyKGxheWVyKVxuICAgICAgICAgICAgICA/ICdObyBsb2FkZWQgcmFzdGVyIHBpeGVscyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKVxuICAgICAgICAgICAgICA/ICdObyBsb2FkZWQgdmVjdG9yIHRpbGUgZmVhdHVyZXMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6ICdObyByb3dzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZycsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUtZW1wdHknXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyKGxheWVyKSkge1xuICAgIGNvbnN0IHBvbHlnb24gPSBmZWF0dXJlO1xuICAgIGNvbnN0IGRvd25sb2FkID1cbiAgICAgIHR5cGVvZiAobGF5ZXIgYXMgYW55KS5kb3dubG9hZENsaXAgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoKGxheWVyIGFzIGFueSkuZG93bmxvYWRDbGlwKHBvbHlnb24pKVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7cG5nOiBmYWxzZSwganNvbjogZmFsc2V9KTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIFVOV1JBUF9UQVNLKGRvd25sb2FkKS5iaW1hcChcbiAgICAgICAgKHJlc3VsdDoge3BuZz86IGJvb2xlYW59IHwgbnVsbCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICByZXN1bHQ/LnBuZ1xuICAgICAgICAgICAgICA/IHN1Y2Nlc3NOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Rvd25sb2FkZWQgcmFzdGVyIGNsaXAgaW1hZ2UgYW5kIHN0YXRzIGZpbGUnLFxuICAgICAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ZhaWxlZCB0byBkb3dubG9hZCByYXN0ZXIgY2xpcCBpbWFnZScsXG4gICAgICAgICAgICAgICAgICBpZDogJ2V4dHJhY3QtcmFzdGVyLWNsaXAnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICBlcnIgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZG93bmxvYWQgcmFzdGVyIGNsaXA6ICR7XG4gICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpXG4gICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICBpZDogJ2V4dHJhY3QtcmFzdGVyLWNsaXAnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9XG4gICAgICBleHRyYWN0ZWQua2luZCA9PT0gJ2dlb2pzb24nXG4gICAgICAgID8gcHJvY2Vzc0dlb2pzb24oe1xuICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIGZlYXR1cmVzOiBleHRyYWN0ZWQuZmVhdHVyZXNcbiAgICAgICAgICB9KVxuICAgICAgICA6IHtmaWVsZHM6IGV4dHJhY3RlZC5maWVsZHMsIHJvd3M6IGV4dHJhY3RlZC5yb3dzfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZXh0cmFjdC0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRXh0cmFjdGVkICR7ZGF0YXNldC5sYWJlbH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcbiAgcmV0dXJuIHBpY2tfKCdhbmltYXRpb25Db25maWcnKShtZXJnZV8odXBkYXRlcykpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25cbik6IFMge1xuICBjb25zdCB7ZXZlbnQsIGxheWVyfSA9IGFjdGlvbjtcbiAgY29uc3Qge2lkOiBkZWNrZ2xMYXllcklkLCBjb3VudH0gPSBldmVudDtcbiAgaWYgKCFsYXllcikge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXJGaWx0ZXJlZEl0ZW1zIGxheWVyIGRvZXNudCBleGlzdHNgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVyLmZpbHRlcmVkSXRlbUNvdW50Py5bZGVja2dsTGF5ZXJJZF0gPT09IGNvdW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQgPSB7XG4gICAgLi4ubGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQsXG4gICAgW2RlY2tnbExheWVySWRdOiBjb3VudFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzd2FwXyhsYXllcikoc3RhdGUubGF5ZXJzKVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBXTVMgZmVhdHVyZSBpbmZvIGFuZCBwaW4gdG9vbHRpcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd21zRmVhdHVyZUluZm9VcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5XTVNGZWF0dXJlSW5mb0FjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZUluZm8sIGNvb3JkaW5hdGV9ID0gYWN0aW9uO1xuICBpZiAoIWxheWVyKSB7XG4gICAgY29uc29sZS53YXJuKGBXTVMgZmVhdHVyZSBpbmZvIGxheWVyIGRvZXNuJ3QgZXhpc3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBjbGlja2VkIG9iamVjdCBzaW1pbGFyIHRvIGxheWVyQ2xpY2tVcGRhdGVyIHRvIHBpbiB0aGUgdG9vbHRpcFxuICBjb25zdCBjbGlja2VkID0gZmVhdHVyZUluZm9cbiAgICA/IHtcbiAgICAgICAgcGlja2VkOiB0cnVlLFxuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICB3bXNGZWF0dXJlSW5mbzogZmVhdHVyZUluZm9cbiAgICAgICAgfSxcbiAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSB8fCBbMCwgMF0sXG4gICAgICAgIGxheWVyOiB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGlkeDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVyLmlkKSxcbiAgICAgICAgICAgIGlkOiBsYXllci5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWRcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4OiBmaWx0ZXJJZHgsIGVuYWJsZSA9IGZhbHNlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuXG4gIC8vIGlmIHdlIGVuYWJsZSBzeW5jIHdlIGFyZSBnb2luZyB0byBtZXJnZSBmaWx0ZXIgYW5kIGFuaW1hdGlvbkNvbmZpZyBkb21haW5zIGFuZCBzdG9yZSBpbnRvIGZpbHRlci5kb21haW5cbiAgaWYgKGVuYWJsZSkge1xuICAgIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhuZXdTdGF0ZS5sYXllcnMpO1xuICAgIC8vIGlmIG5vIGFuaW1hdGFibGVMYXllcnMgYXJlIHByZXNlbnQgd2Ugc2ltcGx5IHJldHVyblxuICAgIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhhbmltYXRhYmxlTGF5ZXJzKTtcbiAgICBjb25zdCBoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIgPSBCb29sZWFuKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoKTtcblxuICAgIGNvbnN0IG5ld0ZpbHRlckRvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMoW2ZpbHRlci5kb21haW4sIG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW5dKTtcblxuICAgIC8vIHdlIG9ubHkgdXBkYXRlIGFuaW1hdGlvbldpbmRvdyBpZiB3ZSBoYXZlIGludGVydmFsIGJhc2VkIGFuaW1hdGlvbiBsYXllcnMgd2l0aCBkZWZpbmVkIGludGVydmFscyBhbmQgdGhlIGN1cnJlbnQgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3cgaXMgbm90IGludGVydmFsXG4gICAgaWYgKGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllcikge1xuICAgICAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpIHtcbiAgICAgICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgICAgaWQ6IGZpbHRlci5pZCxcbiAgICAgICAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAgIC8vIGFkanVzdCB0aW1lIGZpbHRlciBpbnRlcnZhbFxuICAgICAgbmV3RmlsdGVyID0gYWRqdXN0VGltZUZpbHRlckludGVydmFsKG5ld1N0YXRlLCBuZXdGaWx0ZXIpO1xuXG4gICAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIGFkanVzdCB2YWx1ZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKFxuICAgICAgbmV3RmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICA/IFtuZXdGaWx0ZXJEb21haW5bMF0sIG5ld0ZpbHRlckRvbWFpblswXV1cbiAgICAgICAgOiBuZXdGaWx0ZXJEb21haW4sXG4gICAgICB7Li4ubmV3RmlsdGVyLCBkb21haW46IG5ld0ZpbHRlckRvbWFpbn1cbiAgICApO1xuXG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgIC4uLihuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyKSxcbiAgICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgIH07XG5cbiAgICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIHNldCB0aGUgYW5pbWF0aW9uIGNvbmZpZyB2YWx1ZSB0byBtYXRjaCBmaWx0ZXIgdmFsdWVcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgdmFsdWU6IG5ld0ZpbHRlci52YWx1ZVtuZXdGaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBkb21haW4gYW5kIHN0ZXBcbiAgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2VcbiAgfTtcblxuICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgfTtcblxuICAvLyByZXNldCBzeW5jIHRpbWVsaW5lIG1vZGVcbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogU1lOQ19USU1FTElORV9NT0RFUy5lbmRcbiAgfSk7XG5cbiAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAvLyByZXNldCBmaWx0ZXIgdmFsdWVcbiAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5ld0ZpbHRlci5kb21haW4sIG5ld0ZpbHRlcik7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICB9KTtcblxuICAvLyByZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0b1xuICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIHZhbHVlOiBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluPy5bMF0gPz8gbnVsbFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5zZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZUFjdGlvblxuKSB7XG4gIGNvbnN0IHtpZDogZmlsdGVySWQsIG1vZGU6IHN5bmNUaW1lbGluZU1vZGV9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgaWYgKCF2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlciwgc3luY1RpbWVsaW5lTW9kZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNUaW1lbGluZU1vZGVcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICByZXR1cm4gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgZmlsdGVySWR4KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgb2YgdGhlIGxvYWRpbmcgaW5kaWNhdG9yLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSB2aXNTdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBheWxvYWQgd2l0aCBjaGFuZ2Ugb2YgbnVtYmVyIG9mIGFjdGl2ZSBsb2FkaW5nIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtwYXlsb2FkOiB7Y2hhbmdlfX06IHtwYXlsb2FkOiBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZH1cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IHtsb2FkaW5nSW5kaWNhdG9yVmFsdWV9ID0gc3RhdGU7XG4gIGlmICghbG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlID0gMDtcbiAgfVxuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKG5leHRWYWx1ZSA9PT0gMCAmJlxuICAgIChPYmplY3Qua2V5cyhzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge30pLmxlbmd0aCB8fFxuICAgICAgT2JqZWN0LmtleXMoc3RhdGUubG9hZGluZ1Byb2Nlc3NpbmcgfHwge30pLmxlbmd0aClcbiAgICAgID8ge2xvYWRpbmdQcm9ncmVzczoge30sIGxvYWRpbmdQcm9jZXNzaW5nOiB7fX1cbiAgICAgIDoge30pXG4gIH07XG59O1xuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IGh5ZHJhdGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHBlcmNlbnQsIHBoYXNlfTogVmlzU3RhdGVBY3Rpb25zLlNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKChzdGF0ZS5sb2FkaW5nSW5kaWNhdG9yVmFsdWUgfHwgMCkgPD0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGNvbnN0IHByb2Nlc3NpbmcgPSBwaGFzZSA9PT0gJ3Byb2Nlc3NpbmcnO1xuICBpZiAoXG4gICAgc3RhdGUubG9hZGluZ1Byb2dyZXNzPy5baWRdID09PSBuZXh0UGVyY2VudCAmJlxuICAgIEJvb2xlYW4oc3RhdGUubG9hZGluZ1Byb2Nlc3Npbmc/LltpZF0pID09PSBwcm9jZXNzaW5nXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgLi4uc3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgW2lkXTogbmV4dFBlcmNlbnRcbiAgICB9LFxuICAgIC4uLihwcm9jZXNzaW5nXG4gICAgICA/IHtcbiAgICAgICAgICBsb2FkaW5nUHJvY2Vzc2luZzoge1xuICAgICAgICAgICAgLi4uc3RhdGUubG9hZGluZ1Byb2Nlc3NpbmcsXG4gICAgICAgICAgICBbaWRdOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IHt9KVxuICB9O1xufVxuXG5mdW5jdGlvbiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGZpbHRlcklkeDogbnVtYmVyKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgaWYgKChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkge1xuICAgIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwc1xuICAgICAgPyBzbmFwVG9NYXJrcyh0aW1lbGluZVZhbHVlLCBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzKVxuICAgICAgOiB0aW1lbGluZVZhbHVlO1xuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKHN0YXRlLCB7dmFsdWV9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyLnZhbHVlW2ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSkge1xuICAgIHJldHVybiBmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZSA/PyBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbiAgfVxuXG4gIHJldHVybiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciwgbmV3TW9kZTogbnVtYmVyKSB7XG4gIHJldHVybiAhKFxuICAgIGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSAmJiBuZXdNb2RlID09PSBTWU5DX1RJTUVMSU5FX01PREVTLnN0YXJ0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChzdGF0ZSwgZmlsdGVyKSB7XG4gIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgbGV0IGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbEluZGV4ID0gaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5yZWR1Y2UoKGN1cnJlbnRJbmRleCwgbCkgPT4ge1xuICAgICAgaWYgKGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmZpbmRJbmRleChpID0+IGkgPT09IGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gbmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCA8IGN1cnJlbnRJbmRleCA/IG5ld0luZGV4IDogY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0sIFRJTUVfSU5URVJWQUxTX09SREVSRUQubGVuZ3RoIC0gMSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGxheWVyVGltZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbbGF5ZXJUaW1lSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgcGxvdEJhc2VJbmRleEJ5RGF0YUlkID0gZ2V0UGxvdEJhc2VJbmRleEJ5RGF0YUlkKHN0YXRlLmRhdGFzZXRzLCBmaWx0ZXIsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShcbiAgICBmaWx0ZXIsXG4gICAgdXBkYXRlZFBsb3RUeXBlLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHVuZGVmaW5lZCxcbiAgICBwbG90QmFzZUluZGV4QnlEYXRhSWRcbiAgKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlciwgcGxvdEJhc2VJbmRleEJ5RGF0YUlkKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZyxcbiAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldD86IGJvb2xlYW59ID0ge31cbik6IFQge1xuICAvLyBUaGUgc2FtZSBpZCBtZWFucyB0aGUgbmV3IHRhYmxlIG9jY3VwaWVzIHRoZSBvbGQgc2xvdCwgc28gdGhlIHByZXZpb3VzIHJvd3MgaGF2ZSB0byBnby5cbiAgY29uc3QgZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gb3B0aW9ucy5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlIHx8IGRhdGFJZCA9PT0gZGF0YUlkVG9Vc2U7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgaWZfKGRlbGV0ZU9yaWdpbmFsRGF0YXNldCwgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSkpXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZyxcbiAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldD86IGJvb2xlYW59ID0ge31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gb3B0aW9ucy5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlIHx8IGRhdGFJZCA9PT0gZGF0YUlkVG9Vc2U7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSwge2RlbGV0ZU9yaWdpbmFsRGF0YXNldH0pO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBXaGVuIHRoZSBvcmlnaW5hbCB0YWJsZSBzdGF5cywgdGhlIHJlcGxhY2VtZW50IHRha2VzIGl0cyBwbGFjZSBhbmQgdGhlIG9yaWdpbmFsIGZvbGxvd3MgaXQuXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5mbGF0TWFwKGQgPT4ge1xuICAgIGlmIChkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBbZF07XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVPcmlnaW5hbERhdGFzZXQgPyBbZGF0YUlkVG9Vc2VdIDogW2RhdGFJZFRvVXNlLCBkXTtcbiAgfSk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyLlxuICAgIC8vIEtlZXAgdGhlIG9uZXMgb2YgYSBkYXRhc2V0IHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kIG5vdCBtZXJnZWQgYmFjayB5ZXQ6XG4gICAgLy8gaXRzIGxheWVycyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBjdXJyZW50IHNwbGl0IG1hcHMuXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChcbiAgICAgIHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsXG4gICAgICBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXVxuICAgICk7XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVGhlIG9yZGVyIHRvIHByZXNlcnZlIGZvciB0aGUgaXRlbXMgdGhhdCB3aWxsIGJlIG1lcmdlZCBiYWNrLlxuICpcbiAqIGBpZHNgIGNvbWVzIGZyb20gdGhlIHNlcmlhbGl6ZWQgc3RhdGUsIHNvIGl0IGxpc3RzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBpdGVtc1xuICogYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbzogYW4gYXBwIHJlZnJlc2hpbmcgc2V2ZXJhbFxuICogZGF0YXNldHMgaW4gYSByb3cgcHJlcGFyZXMgdGhlIHNlY29uZCByZXBsYWNlbWVudCBiZWZvcmUgdGhlIGZpcnN0IG9uZSdzXG4gKiBpdGVtcyBoYXZlIG1lcmdlZCBiYWNrLiBXcml0aW5nIGBpZHNgIGFzIGl0IGlzIHdvdWxkIGRyb3AgdGhvc2UsIGFuZFxuICogYGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXJgIHB1dHMgYW4gaXRlbSBpdCBjYW5ub3QgcGxhY2UgYXQgdGhlIGZyb250IOKAlFxuICogc28gdGhleSB3b3VsZCBjb21lIGJhY2sgcmV2ZXJzZWQuIFdoZXJlIHRoZXkgYmVsb25nIGlzIHdoYXQgdGhlIG9yZGVyIHdyaXR0ZW5cbiAqIHdoZW4gdGhleSB3ZXJlIHBhcmtlZCBhbHJlYWR5IHNheXMsIHNvIHRoYXQgb3JkZXIgaXMga2VwdCBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgcHJldmlvdXNPcmRlcjogc3RyaW5nW10gPSBbXSxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgcGFya2VkOiB7aWQ/OiBzdHJpbmd9W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFya2VkSWRzID0gcGFya2VkXG4gICAgLm1hcChpdGVtID0+IGl0ZW0/LmlkKVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmICFpZHMuaW5jbHVkZXMoaWQgYXMgc3RyaW5nKSk7XG5cbiAgaWYgKCFwYXJrZWRJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbLi4uaWRzLCAuLi5wYXJrZWRJZHNdKTtcbiAgY29uc3Qgb3JkZXJlZCA9IChwcmV2aW91c09yZGVyIHx8IFtdKS5maWx0ZXIoaWQgPT4ga25vd24uaGFzKGlkKSk7XG4gIGNvbnN0IHJlc3QgPSBbLi4uaWRzLCAuLi5wYXJrZWRJZHNdLmZpbHRlcihpZCA9PiAhb3JkZXJlZC5pbmNsdWRlcyhpZCkpO1xuXG4gIHJldHVybiBbLi4ub3JkZXJlZCwgLi4ucmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIC8vIENhbWVyYSBzbmFwc2hvdHMgbmV2ZXIgcmVmZXJlbmNlIGRhdGFzZXRzLCBldmVuIHdoZW4gYSBkYXRhc2V0IElEIGlzIFwiaWRcIi5cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsIHx8IHByb3BzW2ldID09PSAnY2FtZXJhQm9va21hcmtzJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdoYXQgYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbyBhbmQgaGFzIG5vdFxuICAgICAgICAvLyBtZXJnZWQgYmFjayB5ZXQsIHJlYWQgYmVmb3JlIHRoaXMgb25lIHBhcmtzIGFueXRoaW5nIG9mIGl0cyBvd24uXG4gICAgICAgIGNvbnN0IHBhcmtlZEVsc2V3aGVyZSA9XG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRvQXJyYXkocmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXSA/PyBbXSlcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gICAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdLFxuICAgICAgICAgICAgcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpLFxuICAgICAgICAgICAgcGFya2VkRWxzZXdoZXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmNvbnN0IERBVEFTRVRfT1BfQUREX09QVElPTlMgPSB7XG4gIGF1dG9DcmVhdGVMYXllcnM6IHRydWUsXG4gIGNlbnRlck1hcDogZmFsc2UsXG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KHN0YXRlOiBWaXNTdGF0ZSwgcHJvdG86IFByb3RvRGF0YXNldCk6IFZpc1N0YXRlIHtcbiAgY29uc3QgcmVzdWx0SWQgPSBwcm90by5pbmZvLmlkO1xuICBpZiAoIXJlc3VsdElkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChzdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF0pIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge2RhdGFJZDogcmVzdWx0SWQsIGRhdGE6IHByb3RvLmRhdGF9KTtcbiAgICBjb25zdCBleGlzdGluZyA9IG5leHRTdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF07XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9XG4gICAgZXhpc3RpbmcubWV0YWRhdGEgPSB7XG4gICAgICAuLi5leGlzdGluZy5tZXRhZGF0YSxcbiAgICAgIC4uLnByb3RvLm1ldGFkYXRhXG4gICAgfTtcbiAgICBleGlzdGluZy5sYWJlbCA9IHByb3RvLmluZm8ubGFiZWwgfHwgZXhpc3RpbmcubGFiZWw7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czogcHJvdG8sXG4gICAgb3B0aW9uczogREFUQVNFVF9PUF9BRERfT1BUSU9OU1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkdyb3VwQnlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1bkdyb3VwQnlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlR3JvdXBCeShzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuSm9pblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVKb2luKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5TcGF0aWFsSm9pblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuU3BhdGlhbEpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlU3BhdGlhbEpvaW4oc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blN1aXRhYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5TdWl0YWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVTdWl0YWJpbGl0eShzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQge1xuICBhZGRHcm91cEJ5VXBkYXRlcixcbiAgYWRkSm9pblVwZGF0ZXIsXG4gIGFkZFNwYXRpYWxKb2luVXBkYXRlcixcbiAgYWRkU3VpdGFiaWxpdHlVcGRhdGVyLFxuICByZW1vdmVEYXRhc2V0T3BVcGRhdGVyLFxuICBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcixcbiAgc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sNkJBQTZCO0FBQ25ELE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsT0FBTyxNQUFNLDJCQUEyQjtBQUMvQyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtB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
|