@kepler.gl/reducers 3.3.0-alpha.14 → 3.3.0-alpha.16
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/combined-updaters.js +166 -8
- package/dist/cjs/composers.js +4 -5
- package/dist/cjs/dataset-ops-updaters.js +289 -0
- package/dist/cjs/dataset-ops-updaters.spec.js +257 -0
- package/dist/cjs/interaction-utils.js +156 -4
- package/dist/cjs/layer-utils.js +133 -8
- package/dist/cjs/ui-state-updaters.js +115 -48
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger.js +35 -4
- package/dist/cjs/vis-state-selectors.js +5 -4
- package/dist/cjs/vis-state-updaters.js +731 -232
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +21 -1
- package/dist/composers.d.ts +3 -0
- package/dist/dataset-ops-updaters.d.ts +18 -0
- package/dist/dataset-ops-updaters.spec.d.ts +1 -0
- package/dist/esm/combined-updaters.js +166 -8
- package/dist/esm/composers.js +3 -2
- package/dist/esm/dataset-ops-updaters.js +274 -0
- package/dist/esm/dataset-ops-updaters.spec.js +256 -0
- package/dist/esm/interaction-utils.js +150 -1
- package/dist/esm/layer-utils.js +131 -8
- package/dist/esm/ui-state-updaters.js +115 -48
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger.js +35 -4
- package/dist/esm/vis-state-selectors.js +5 -4
- package/dist/esm/vis-state-updaters.js +687 -237
- package/dist/esm/vis-state.js +2 -2
- package/dist/interaction-utils.d.ts +21 -1
- package/dist/layer-utils.d.ts +16 -0
- package/dist/ui-state-updaters.d.ts +32 -0
- package/dist/vis-state-updaters.d.ts +38 -12
- package/dist/vis-state.d.ts +20 -0
- package/package.json +16 -16
|
@@ -8,18 +8,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.addChartUpdater = exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
|
|
9
9
|
exports.addDefaultLayers = addDefaultLayers;
|
|
10
10
|
exports.addDefaultTooltips = addDefaultTooltips;
|
|
11
|
-
exports.
|
|
11
|
+
exports.addFilterUpdater = exports.addEffectUpdater = void 0;
|
|
12
|
+
Object.defineProperty(exports, "addGroupByUpdater", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _datasetOpsUpdaters.addGroupByUpdater;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "addJoinUpdater", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _datasetOpsUpdaters.addJoinUpdater;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
exports.addLayerUpdater = exports.addLayerToLayerGroupUpdater = exports.addLayerGroupUpdater = void 0;
|
|
25
|
+
Object.defineProperty(exports, "addSpatialJoinUpdater", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function get() {
|
|
28
|
+
return _datasetOpsUpdaters.addSpatialJoinUpdater;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
12
31
|
exports.addToDatasetUpdater = addToDatasetUpdater;
|
|
13
32
|
exports.applyCPUFilterUpdater = void 0;
|
|
14
33
|
exports.applyFilterConfigUpdater = applyFilterConfigUpdater;
|
|
15
34
|
exports.applyLayerConfigUpdater = applyLayerConfigUpdater;
|
|
16
35
|
exports.applyMergersUpdater = applyMergersUpdater;
|
|
36
|
+
exports.clearStagedLoadedFilesUpdater = void 0;
|
|
17
37
|
exports.closeSpecificMapAtIndex = closeSpecificMapAtIndex;
|
|
18
38
|
exports.convertEditorFeaturesToLayerUpdater = convertEditorFeaturesToLayerUpdater;
|
|
19
39
|
exports.copyTableColumnUpdater = copyTableColumnUpdater;
|
|
20
40
|
exports.defaultInteractionConfig = exports.createOrUpdateFilterUpdater = exports.createNewDatasetSuccessUpdater = void 0;
|
|
21
41
|
exports.deleteFeatureUpdater = deleteFeatureUpdater;
|
|
22
42
|
exports.duplicateLayerUpdater = exports.duplicateAnnotationUpdater = void 0;
|
|
43
|
+
exports.expandZipArchiveSuccessUpdater = expandZipArchiveSuccessUpdater;
|
|
23
44
|
exports.extractDataFromFeatureUpdater = extractDataFromFeatureUpdater;
|
|
24
45
|
exports.initialFileLoadingProgress = initialFileLoadingProgress;
|
|
25
46
|
exports.interactionConfigChangeUpdater = interactionConfigChangeUpdater;
|
|
@@ -55,6 +76,12 @@ exports.refreshDatasetProgressUpdater = refreshDatasetProgressUpdater;
|
|
|
55
76
|
exports.refreshDatasetSuccessUpdater = refreshDatasetSuccessUpdater;
|
|
56
77
|
exports.refreshDatasetUpdater = refreshDatasetUpdater;
|
|
57
78
|
exports.removeChartUpdater = exports.removeAnnotationUpdater = void 0;
|
|
79
|
+
Object.defineProperty(exports, "removeDatasetOpUpdater", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function get() {
|
|
82
|
+
return _datasetOpsUpdaters.removeDatasetOpUpdater;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
58
85
|
exports.removeDatasetUpdater = removeDatasetUpdater;
|
|
59
86
|
exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
|
|
60
87
|
exports.removeFromDatasetUpdater = removeFromDatasetUpdater;
|
|
@@ -64,6 +91,9 @@ exports.renameDatasetUpdater = renameDatasetUpdater;
|
|
|
64
91
|
exports.reorderLayerUpdater = exports.reorderEffectUpdater = void 0;
|
|
65
92
|
exports.replaceDatasetDepsInState = replaceDatasetDepsInState;
|
|
66
93
|
exports.resetMapConfigUpdater = void 0;
|
|
94
|
+
exports.runGroupByUpdater = runGroupByUpdater;
|
|
95
|
+
exports.runJoinUpdater = runJoinUpdater;
|
|
96
|
+
exports.runSpatialJoinUpdater = runSpatialJoinUpdater;
|
|
67
97
|
exports.setAnimationConfigUpdater = setAnimationConfigUpdater;
|
|
68
98
|
exports.setColumnDisplayFormatUpdater = setColumnDisplayFormatUpdater;
|
|
69
99
|
exports.setEditorFeaturePropertiesUpdater = setEditorFeaturePropertiesUpdater;
|
|
@@ -75,12 +105,32 @@ exports.setFilterAnimationWindowUpdater = setFilterAnimationWindowUpdater;
|
|
|
75
105
|
exports.setFilterPlotUpdater = void 0;
|
|
76
106
|
exports.setFilterUpdater = setFilterUpdater;
|
|
77
107
|
exports.setFilterViewUpdater = void 0;
|
|
108
|
+
Object.defineProperty(exports, "setGroupByConfigUpdater", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function get() {
|
|
111
|
+
return _datasetOpsUpdaters.setGroupByConfigUpdater;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
78
114
|
exports.setInitialLayerConfig = setInitialLayerConfig;
|
|
115
|
+
Object.defineProperty(exports, "setJoinConfigUpdater", {
|
|
116
|
+
enumerable: true,
|
|
117
|
+
get: function get() {
|
|
118
|
+
return _datasetOpsUpdaters.setJoinConfigUpdater;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
79
121
|
exports.setLayerAnimationTimeConfigUpdater = setLayerAnimationTimeConfigUpdater;
|
|
80
|
-
exports.
|
|
122
|
+
exports.setLoadingIndicatorUpdater = exports.setLayerAnimationTimeUpdater = void 0;
|
|
123
|
+
exports.setLoadingProgressUpdater = setLoadingProgressUpdater;
|
|
124
|
+
exports.setMapInfoUpdater = void 0;
|
|
81
125
|
exports.setPolygonFilterAllLayersUpdater = setPolygonFilterAllLayersUpdater;
|
|
82
126
|
exports.setPolygonFilterLayerUpdater = setPolygonFilterLayerUpdater;
|
|
83
127
|
exports.setSelectedFeatureUpdater = exports.setSelectedAnnotationUpdater = void 0;
|
|
128
|
+
Object.defineProperty(exports, "setSpatialJoinConfigUpdater", {
|
|
129
|
+
enumerable: true,
|
|
130
|
+
get: function get() {
|
|
131
|
+
return _datasetOpsUpdaters.setSpatialJoinConfigUpdater;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
84
134
|
exports.setTimeFilterTimelineModeUpdater = setTimeFilterTimelineModeUpdater;
|
|
85
135
|
exports.showDatasetTableUpdater = void 0;
|
|
86
136
|
exports.sortTableColumnUpdater = sortTableColumnUpdater;
|
|
@@ -132,6 +182,7 @@ var _processors = require("@kepler.gl/processors");
|
|
|
132
182
|
var _table = require("@kepler.gl/table");
|
|
133
183
|
var _interactionUtils = require("./interaction-utils");
|
|
134
184
|
var _layerUtils = require("./layer-utils");
|
|
185
|
+
var _datasetOpsUpdaters = require("./dataset-ops-updaters");
|
|
135
186
|
var _effects = require("@kepler.gl/effects");
|
|
136
187
|
var _dataUtils = require("./data-utils");
|
|
137
188
|
var _excluded = ["dataId"],
|
|
@@ -204,6 +255,14 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
|
|
|
204
255
|
compareType: _constants.COMPARE_TYPES.ABSOLUTE
|
|
205
256
|
}
|
|
206
257
|
},
|
|
258
|
+
legend: {
|
|
259
|
+
id: 'legend',
|
|
260
|
+
label: 'interactions.legend',
|
|
261
|
+
enabled: false,
|
|
262
|
+
config: {
|
|
263
|
+
hideInvisibleLayers: false
|
|
264
|
+
}
|
|
265
|
+
},
|
|
207
266
|
geocoder: {
|
|
208
267
|
id: 'geocoder',
|
|
209
268
|
label: 'interactions.geocoder',
|
|
@@ -219,7 +278,7 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
|
|
|
219
278
|
enabled: false,
|
|
220
279
|
config: {
|
|
221
280
|
// size is in km
|
|
222
|
-
size:
|
|
281
|
+
size: 2.5
|
|
223
282
|
}
|
|
224
283
|
},
|
|
225
284
|
coordinate: {
|
|
@@ -227,6 +286,19 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
|
|
|
227
286
|
label: 'interactions.coordinate',
|
|
228
287
|
enabled: false,
|
|
229
288
|
position: null
|
|
289
|
+
},
|
|
290
|
+
annotation: {
|
|
291
|
+
id: 'annotation',
|
|
292
|
+
label: 'interactions.annotation',
|
|
293
|
+
enabled: false
|
|
294
|
+
},
|
|
295
|
+
zoomOpacity: {
|
|
296
|
+
id: 'zoomOpacity',
|
|
297
|
+
label: 'interactions.fadeOnZoom',
|
|
298
|
+
enabled: false,
|
|
299
|
+
config: {
|
|
300
|
+
controllers: []
|
|
301
|
+
}
|
|
230
302
|
}
|
|
231
303
|
};
|
|
232
304
|
var DEFAULT_ANIMATION_CONFIG = exports.DEFAULT_ANIMATION_CONFIG = {
|
|
@@ -272,6 +344,8 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
|
|
|
272
344
|
// a collection of multiple dataset
|
|
273
345
|
datasets: {},
|
|
274
346
|
editingDataset: undefined,
|
|
347
|
+
groupBys: [],
|
|
348
|
+
joins: [],
|
|
275
349
|
// effects
|
|
276
350
|
effects: [],
|
|
277
351
|
effectOrder: [],
|
|
@@ -311,8 +385,11 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
|
|
|
311
385
|
editor: DEFAULT_EDITOR,
|
|
312
386
|
fileLoading: false,
|
|
313
387
|
fileLoadingProgress: {},
|
|
388
|
+
stagedToAdd: null,
|
|
314
389
|
// for loading datasets
|
|
315
390
|
loadingIndicatorValue: 0,
|
|
391
|
+
loadingProgress: {},
|
|
392
|
+
loadingProcessing: {},
|
|
316
393
|
loaders: [],
|
|
317
394
|
loadOptions: {},
|
|
318
395
|
// visStateMergers
|
|
@@ -879,6 +956,25 @@ function setInitialLayerConfig(layer, datasets, layerClasses) {
|
|
|
879
956
|
}
|
|
880
957
|
return typeof newLayer.setInitialLayerConfig === 'function' ? newLayer.setInitialLayerConfig(dataset) : newLayer;
|
|
881
958
|
}
|
|
959
|
+
/**
|
|
960
|
+
* Fit the map when the layer type dropdown gives an empty layer its first
|
|
961
|
+
* type and that layer already points at a dataset. Later type changes,
|
|
962
|
+
* programmatic `layerTypeChange`, and saved-config applies leave the camera
|
|
963
|
+
* alone. Gated by `enableFitBoundsOnManualLayer`.
|
|
964
|
+
*/
|
|
965
|
+
function maybeFitManualLayerBounds(state, oldLayer, layer, fitBounds) {
|
|
966
|
+
if (!fitBounds || oldLayer.type || !layer.config.dataId || !(0, _utils.getApplicationConfig)().enableFitBoundsOnManualLayer) {
|
|
967
|
+
return state;
|
|
968
|
+
}
|
|
969
|
+
var bounds = (0, _dataUtils.findMapBounds)([layer]);
|
|
970
|
+
if (!bounds) {
|
|
971
|
+
return state;
|
|
972
|
+
}
|
|
973
|
+
return (0, _tasks.withTask)(state, ACTION_TASK_FIT_BOUNDS().map(function () {
|
|
974
|
+
return (0, _actions.fitBounds)(bounds);
|
|
975
|
+
}));
|
|
976
|
+
}
|
|
977
|
+
|
|
882
978
|
/**
|
|
883
979
|
* Update layer type. Previews layer config will be copied if applicable.
|
|
884
980
|
* @memberof visStateUpdaters
|
|
@@ -952,7 +1048,7 @@ function layerTypeChangeUpdater(state, action) {
|
|
|
952
1048
|
newState = _objectSpread(_objectSpread({}, newState), {}, {
|
|
953
1049
|
layerOrder: (0, _layerUtils.replaceLayerEntryInLayerOrder)(newState.layerOrder, oldLayer.id, newLayer.id)
|
|
954
1050
|
});
|
|
955
|
-
return newState;
|
|
1051
|
+
return maybeFitManualLayerBounds(newState, oldLayer, layer, action.fitBounds);
|
|
956
1052
|
}
|
|
957
1053
|
|
|
958
1054
|
/**
|
|
@@ -1159,13 +1255,24 @@ function setFilterAnimationWindowUpdater(state, _ref5) {
|
|
|
1159
1255
|
if (!filter) {
|
|
1160
1256
|
return state;
|
|
1161
1257
|
}
|
|
1162
|
-
var
|
|
1258
|
+
var previousWindow = filter.animationWindow;
|
|
1259
|
+
var nextFilter = _objectSpread(_objectSpread({}, filter), {}, {
|
|
1163
1260
|
animationWindow: animationWindow
|
|
1164
1261
|
});
|
|
1262
|
+
|
|
1263
|
+
// Entering or leaving interval playback snaps the window onto histogram bins.
|
|
1264
|
+
if (filter.type === _constants.FILTER_TYPES.timeRange && (previousWindow === _constants.ANIMATION_WINDOW.interval || animationWindow === _constants.ANIMATION_WINDOW.interval)) {
|
|
1265
|
+
var adjusted = (0, _utils.adjustValueToAnimationWindow)(state, nextFilter);
|
|
1266
|
+
if (Array.isArray(adjusted.value) && adjusted.value.every(function (v) {
|
|
1267
|
+
return Number.isFinite(v);
|
|
1268
|
+
})) {
|
|
1269
|
+
nextFilter = adjusted;
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1165
1272
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1166
|
-
filters: (0, _composerHelpers.swap_)(
|
|
1273
|
+
filters: (0, _composerHelpers.swap_)(nextFilter)(state.filters)
|
|
1167
1274
|
});
|
|
1168
|
-
var newSyncTimelineMode = getSyncAnimationMode(
|
|
1275
|
+
var newSyncTimelineMode = getSyncAnimationMode(nextFilter);
|
|
1169
1276
|
return setTimeFilterTimelineModeUpdater(newState, {
|
|
1170
1277
|
id: id,
|
|
1171
1278
|
mode: newSyncTimelineMode
|
|
@@ -1444,7 +1551,14 @@ var setFilterPlotUpdater = exports.setFilterPlotUpdater = function setFilterPlot
|
|
|
1444
1551
|
var newFilter = state.filters[idx];
|
|
1445
1552
|
for (var prop in newProp) {
|
|
1446
1553
|
if (prop === 'plotType') {
|
|
1447
|
-
|
|
1554
|
+
var plotTypeUpdate = newProp.plotType;
|
|
1555
|
+
if (plotTypeUpdate && Object.prototype.hasOwnProperty.call(plotTypeUpdate, 'groupBy')) {
|
|
1556
|
+
var _newFilter$plotType;
|
|
1557
|
+
plotTypeUpdate = _objectSpread(_objectSpread({}, plotTypeUpdate), {}, {
|
|
1558
|
+
groupBy: (0, _utils.mergePlotGroupBy)((_newFilter$plotType = newFilter.plotType) === null || _newFilter$plotType === void 0 ? void 0 : _newFilter$plotType.groupBy, plotTypeUpdate.groupBy)
|
|
1559
|
+
});
|
|
1560
|
+
}
|
|
1561
|
+
newFilter = (0, _composerHelpers.pick_)('plotType')((0, _composerHelpers.merge_)(plotTypeUpdate))(newFilter);
|
|
1448
1562
|
} else if (prop === 'yAxis') {
|
|
1449
1563
|
var chartType = newProp.yAxis ? _constants.PLOT_TYPES.lineChart : _constants.PLOT_TYPES.histogram;
|
|
1450
1564
|
newFilter = (0, _composerHelpers.pick_)('plotType')((0, _composerHelpers.merge_)({
|
|
@@ -1786,6 +1900,7 @@ function removeLayerUpdater(state, _ref9) {
|
|
|
1786
1900
|
clicked = state.clicked,
|
|
1787
1901
|
hoverInfo = state.hoverInfo;
|
|
1788
1902
|
var layerToRemove = layers[idx];
|
|
1903
|
+
var interactionConfig = state.interactionConfig ? (0, _interactionUtils.removeLayerFromZoomOpacity)(state.interactionConfig, layerToRemove.id) : state.interactionConfig;
|
|
1789
1904
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1790
1905
|
layers: (0, _composerHelpers.filterOutById)(layerToRemove.id)(layers),
|
|
1791
1906
|
layerData: (0, _composerHelpers.removeElementAtIndex)(idx)(layerData),
|
|
@@ -1793,8 +1908,9 @@ function removeLayerUpdater(state, _ref9) {
|
|
|
1793
1908
|
clicked: layerToRemove.isLayerHovered(clicked) ? undefined : clicked,
|
|
1794
1909
|
hoverInfo: layerToRemove.isLayerHovered(hoverInfo) ? undefined : hoverInfo,
|
|
1795
1910
|
splitMaps: (0, _utils.removeLayerFromSplitMaps)(state.splitMaps, layerToRemove)
|
|
1796
|
-
|
|
1797
|
-
|
|
1911
|
+
}, interactionConfig !== state.interactionConfig ? {
|
|
1912
|
+
interactionConfig: interactionConfig
|
|
1913
|
+
} : {});
|
|
1798
1914
|
return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
|
|
1799
1915
|
return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
|
|
1800
1916
|
}));
|
|
@@ -2329,7 +2445,8 @@ var addChartUpdater = exports.addChartUpdater = function addChartUpdater(state,
|
|
|
2329
2445
|
charts: [].concat((0, _toConsumableArray2["default"])((state.charts || []).map(function (existing) {
|
|
2330
2446
|
return _objectSpread(_objectSpread({}, existing), {}, {
|
|
2331
2447
|
display: _objectSpread(_objectSpread({}, existing.display), {}, {
|
|
2332
|
-
isConfigActive: false
|
|
2448
|
+
isConfigActive: false,
|
|
2449
|
+
isJsonEditorActive: false
|
|
2333
2450
|
})
|
|
2334
2451
|
});
|
|
2335
2452
|
})), [_objectSpread(_objectSpread({}, chart), {}, {
|
|
@@ -2567,25 +2684,31 @@ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = functi
|
|
|
2567
2684
|
* @public
|
|
2568
2685
|
*/
|
|
2569
2686
|
function removeDatasetUpdater(state, action) {
|
|
2570
|
-
// extract dataset key
|
|
2571
2687
|
var datasetKey = action.dataId;
|
|
2572
2688
|
var datasets = state.datasets;
|
|
2689
|
+
if (!datasets[datasetKey]) {
|
|
2690
|
+
return state;
|
|
2691
|
+
}
|
|
2573
2692
|
|
|
2574
|
-
//
|
|
2693
|
+
// Derived tables are snapshots: keep them when a source dataset is deleted.
|
|
2694
|
+
// Only drop in-progress group-by / join drafts that referenced this dataset.
|
|
2695
|
+
var nextState = (0, _datasetOpsUpdaters.removeOpsForDatasets)(state, [datasetKey]);
|
|
2696
|
+
return removeSingleDatasetUpdater(nextState, datasetKey);
|
|
2697
|
+
}
|
|
2698
|
+
function removeSingleDatasetUpdater(state, datasetKey) {
|
|
2699
|
+
var datasets = state.datasets;
|
|
2575
2700
|
if (!datasets[datasetKey]) {
|
|
2576
2701
|
return state;
|
|
2577
2702
|
}
|
|
2578
2703
|
var layers = state.layers,
|
|
2579
2704
|
_state$datasets = state.datasets,
|
|
2580
|
-
|
|
2705
|
+
_dataset = _state$datasets[datasetKey],
|
|
2581
2706
|
newDatasets = (0, _objectWithoutProperties2["default"])(_state$datasets, [datasetKey].map(_toPropertyKey));
|
|
2582
2707
|
var layersToRemove = layers.filter(function (l) {
|
|
2583
2708
|
return l.config.dataId === datasetKey;
|
|
2584
2709
|
}).map(function (l) {
|
|
2585
2710
|
return l.id;
|
|
2586
2711
|
});
|
|
2587
|
-
|
|
2588
|
-
// remove layers and datasets
|
|
2589
2712
|
var newState = layersToRemove.reduce(function (accu, id) {
|
|
2590
2713
|
return removeLayerUpdater(accu, {
|
|
2591
2714
|
id: id
|
|
@@ -2593,8 +2716,6 @@ function removeDatasetUpdater(state, action) {
|
|
|
2593
2716
|
}, _objectSpread(_objectSpread({}, state), {}, {
|
|
2594
2717
|
datasets: newDatasets
|
|
2595
2718
|
}));
|
|
2596
|
-
|
|
2597
|
-
// update filters
|
|
2598
2719
|
var filters = [];
|
|
2599
2720
|
var _iterator2 = _createForOfIteratorHelper(newState.filters),
|
|
2600
2721
|
_step2;
|
|
@@ -2603,10 +2724,8 @@ function removeDatasetUpdater(state, action) {
|
|
|
2603
2724
|
var filter = _step2.value;
|
|
2604
2725
|
var valueIndex = filter.dataId.indexOf(datasetKey);
|
|
2605
2726
|
if (valueIndex >= 0 && filter.dataId.length > 1) {
|
|
2606
|
-
// only remove one synced dataset from the filter
|
|
2607
2727
|
filters.push(_removeFilterDataIdAtValueIndex(filter, valueIndex, datasets));
|
|
2608
2728
|
} else if (valueIndex < 0) {
|
|
2609
|
-
// leave the filter as is
|
|
2610
2729
|
filters.push(filter);
|
|
2611
2730
|
}
|
|
2612
2731
|
}
|
|
@@ -2885,33 +3004,35 @@ function hydrateExternallyHostedProtoDataset(_x) {
|
|
|
2885
3004
|
return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
|
|
2886
3005
|
}
|
|
2887
3006
|
function _hydrateExternallyHostedProtoDataset() {
|
|
2888
|
-
_hydrateExternallyHostedProtoDataset = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(
|
|
2889
|
-
var _dataset$
|
|
2890
|
-
var loaded, _dataset$
|
|
3007
|
+
_hydrateExternallyHostedProtoDataset = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref26) {
|
|
3008
|
+
var _dataset$metadata7, _dataset$metadata8;
|
|
3009
|
+
var dataset, onProgress, loaded, _dataset$metadata9;
|
|
2891
3010
|
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
2892
3011
|
while (1) switch (_context2.prev = _context2.next) {
|
|
2893
3012
|
case 0:
|
|
3013
|
+
dataset = _ref26.arg, onProgress = _ref26.onProgress;
|
|
2894
3014
|
if (needsExternallyHostedHydrate(dataset)) {
|
|
2895
|
-
_context2.next =
|
|
3015
|
+
_context2.next = 3;
|
|
2896
3016
|
break;
|
|
2897
3017
|
}
|
|
2898
3018
|
return _context2.abrupt("return", dataset);
|
|
2899
|
-
case
|
|
2900
|
-
_context2.next =
|
|
3019
|
+
case 3:
|
|
3020
|
+
_context2.next = 5;
|
|
2901
3021
|
return (0, _processors.loadExternallyHostedDataset)({
|
|
2902
|
-
source: (_dataset$
|
|
3022
|
+
source: (_dataset$metadata7 = dataset.metadata) === null || _dataset$metadata7 === void 0 ? void 0 : _dataset$metadata7.source,
|
|
2903
3023
|
format: (0, _constants.getRemoteSourceFormat)(dataset.metadata),
|
|
2904
|
-
size: typeof ((_dataset$
|
|
2905
|
-
bypassCache: (0, _constants.getDatasetRefreshIntervalMs)(dataset.metadata) > 0
|
|
3024
|
+
size: typeof ((_dataset$metadata8 = dataset.metadata) === null || _dataset$metadata8 === void 0 ? void 0 : _dataset$metadata8.size) === 'number' ? dataset.metadata.size : undefined,
|
|
3025
|
+
bypassCache: (0, _constants.getDatasetRefreshIntervalMs)(dataset.metadata) > 0,
|
|
3026
|
+
onProgress: onProgress
|
|
2906
3027
|
});
|
|
2907
|
-
case
|
|
3028
|
+
case 5:
|
|
2908
3029
|
loaded = _context2.sent;
|
|
2909
3030
|
if (loaded.data) {
|
|
2910
|
-
_context2.next =
|
|
3031
|
+
_context2.next = 8;
|
|
2911
3032
|
break;
|
|
2912
3033
|
}
|
|
2913
|
-
throw new Error("No data loaded from ".concat((_dataset$
|
|
2914
|
-
case
|
|
3034
|
+
throw new Error("No data loaded from ".concat((_dataset$metadata9 = dataset.metadata) === null || _dataset$metadata9 === void 0 ? void 0 : _dataset$metadata9.source));
|
|
3035
|
+
case 8:
|
|
2915
3036
|
return _context2.abrupt("return", _objectSpread(_objectSpread({}, dataset), {}, {
|
|
2916
3037
|
data: loaded.data,
|
|
2917
3038
|
metadata: _objectSpread(_objectSpread(_objectSpread({}, dataset.metadata), {}, {
|
|
@@ -2924,7 +3045,7 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2924
3045
|
refreshStatus: 'idle'
|
|
2925
3046
|
})
|
|
2926
3047
|
}));
|
|
2927
|
-
case
|
|
3048
|
+
case 9:
|
|
2928
3049
|
case "end":
|
|
2929
3050
|
return _context2.stop();
|
|
2930
3051
|
}
|
|
@@ -2932,9 +3053,9 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2932
3053
|
}));
|
|
2933
3054
|
return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
|
|
2934
3055
|
}
|
|
2935
|
-
var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].
|
|
3056
|
+
var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithProgress(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
|
|
2936
3057
|
var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/function () {
|
|
2937
|
-
var
|
|
3058
|
+
var _ref27 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
|
|
2938
3059
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
2939
3060
|
while (1) switch (_context.prev = _context.next) {
|
|
2940
3061
|
case 0:
|
|
@@ -2946,18 +3067,62 @@ var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/functi
|
|
|
2946
3067
|
}, _callee);
|
|
2947
3068
|
}));
|
|
2948
3069
|
return function (_x2) {
|
|
2949
|
-
return
|
|
3070
|
+
return _ref27.apply(this, arguments);
|
|
2950
3071
|
};
|
|
2951
3072
|
}(), 'FAIL_CREATE_DATASET_TASK');
|
|
3073
|
+
function getDatasetProgressId(dataset) {
|
|
3074
|
+
var _dataset$info2, _dataset$metadata2;
|
|
3075
|
+
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
3076
|
+
if (typeof ((_dataset$info2 = dataset.info) === null || _dataset$info2 === void 0 ? void 0 : _dataset$info2.id) === 'string' && dataset.info.id) {
|
|
3077
|
+
return dataset.info.id;
|
|
3078
|
+
}
|
|
3079
|
+
if (typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) === 'string' && dataset.metadata.source) {
|
|
3080
|
+
return dataset.metadata.source;
|
|
3081
|
+
}
|
|
3082
|
+
return "dataset-".concat(index);
|
|
3083
|
+
}
|
|
2952
3084
|
function createNewDataEntryTask(dataset, datasets) {
|
|
2953
3085
|
if (!needsExternallyHostedHydrate(dataset)) {
|
|
2954
3086
|
return (0, _table.createNewDataEntry)(dataset, datasets);
|
|
2955
3087
|
}
|
|
2956
|
-
|
|
3088
|
+
var progressId = getDatasetProgressId(dataset);
|
|
3089
|
+
return HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK({
|
|
3090
|
+
arg: dataset,
|
|
3091
|
+
onProgress: function onProgress(progress) {
|
|
3092
|
+
var _progress$percent;
|
|
3093
|
+
return (0, _actions.setLoadingProgress)(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100), (progress === null || progress === void 0 ? void 0 : progress.phase) === 'processing' ? 'processing' : undefined);
|
|
3094
|
+
}
|
|
3095
|
+
}).chain(function (hydrated) {
|
|
2957
3096
|
var task = (0, _table.createNewDataEntry)(hydrated, datasets);
|
|
2958
3097
|
return task || FAIL_CREATE_DATASET_TASK('Failed to create a new dataset due to data verification errors');
|
|
2959
3098
|
});
|
|
2960
3099
|
}
|
|
3100
|
+
function clearLoadingProgress(state, ids) {
|
|
3101
|
+
var current = state.loadingProgress || {};
|
|
3102
|
+
var processing = state.loadingProcessing || {};
|
|
3103
|
+
if (!Object.keys(current).length && !Object.keys(processing).length) {
|
|
3104
|
+
return state;
|
|
3105
|
+
}
|
|
3106
|
+
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
3107
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
3108
|
+
loadingProgress: {},
|
|
3109
|
+
loadingProcessing: {}
|
|
3110
|
+
});
|
|
3111
|
+
}
|
|
3112
|
+
if (!(ids !== null && ids !== void 0 && ids.length)) {
|
|
3113
|
+
return state;
|
|
3114
|
+
}
|
|
3115
|
+
var next = _objectSpread({}, current);
|
|
3116
|
+
var nextProcessing = _objectSpread({}, processing);
|
|
3117
|
+
ids.forEach(function (id) {
|
|
3118
|
+
delete next[id];
|
|
3119
|
+
delete nextProcessing[id];
|
|
3120
|
+
});
|
|
3121
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
3122
|
+
loadingProgress: next,
|
|
3123
|
+
loadingProcessing: nextProcessing
|
|
3124
|
+
});
|
|
3125
|
+
}
|
|
2961
3126
|
function patchDatasetMetadata(dataset, patch) {
|
|
2962
3127
|
return (0, _table.copyTableAndUpdate)(dataset, {
|
|
2963
3128
|
metadata: _objectSpread(_objectSpread({}, dataset.metadata), patch)
|
|
@@ -2967,12 +3132,12 @@ function refreshExternallyHostedTable(_x3) {
|
|
|
2967
3132
|
return _refreshExternallyHostedTable.apply(this, arguments);
|
|
2968
3133
|
}
|
|
2969
3134
|
function _refreshExternallyHostedTable() {
|
|
2970
|
-
_refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(
|
|
3135
|
+
_refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref28) {
|
|
2971
3136
|
var metadata, onProgress;
|
|
2972
3137
|
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
2973
3138
|
while (1) switch (_context3.prev = _context3.next) {
|
|
2974
3139
|
case 0:
|
|
2975
|
-
metadata =
|
|
3140
|
+
metadata = _ref28.arg, onProgress = _ref28.onProgress;
|
|
2976
3141
|
return _context3.abrupt("return", (0, _processors.loadExternallyHostedDataset)(_objectSpread(_objectSpread({}, metadata), {}, {
|
|
2977
3142
|
onProgress: onProgress,
|
|
2978
3143
|
bypassCache: true
|
|
@@ -2993,14 +3158,14 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithPr
|
|
|
2993
3158
|
* @memberof visStateUpdaters
|
|
2994
3159
|
* @public
|
|
2995
3160
|
*/
|
|
2996
|
-
function refreshDatasetUpdater(state,
|
|
2997
|
-
var _dataset$
|
|
2998
|
-
var dataId =
|
|
3161
|
+
function refreshDatasetUpdater(state, _ref29) {
|
|
3162
|
+
var _dataset$metadata3, _dataset$metadata4;
|
|
3163
|
+
var dataId = _ref29.dataId;
|
|
2999
3164
|
var dataset = state.datasets[dataId];
|
|
3000
|
-
if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$
|
|
3165
|
+
if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.source) !== 'string') {
|
|
3001
3166
|
return state;
|
|
3002
3167
|
}
|
|
3003
|
-
if (((_dataset$
|
|
3168
|
+
if (((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) === 'loading') {
|
|
3004
3169
|
return state;
|
|
3005
3170
|
}
|
|
3006
3171
|
var nextDataset = patchDatasetMetadata(dataset, {
|
|
@@ -3019,8 +3184,8 @@ function refreshDatasetUpdater(state, _ref28) {
|
|
|
3019
3184
|
lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
|
|
3020
3185
|
},
|
|
3021
3186
|
onProgress: function onProgress(progress) {
|
|
3022
|
-
var _progress$
|
|
3023
|
-
return (0, _actions.refreshDatasetProgress)(dataId, Math.round(((_progress$
|
|
3187
|
+
var _progress$percent2;
|
|
3188
|
+
return (0, _actions.refreshDatasetProgress)(dataId, Math.round(((_progress$percent2 = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent2 !== void 0 ? _progress$percent2 : 0) * 100));
|
|
3024
3189
|
}
|
|
3025
3190
|
}).bimap(function (result) {
|
|
3026
3191
|
return (0, _actions.refreshDatasetSuccess)(dataId, result);
|
|
@@ -3034,16 +3199,16 @@ function refreshDatasetUpdater(state, _ref28) {
|
|
|
3034
3199
|
* @memberof visStateUpdaters
|
|
3035
3200
|
* @public
|
|
3036
3201
|
*/
|
|
3037
|
-
function refreshDatasetProgressUpdater(state,
|
|
3038
|
-
var _dataset$
|
|
3039
|
-
var dataId =
|
|
3040
|
-
percent =
|
|
3202
|
+
function refreshDatasetProgressUpdater(state, _ref30) {
|
|
3203
|
+
var _dataset$metadata5, _dataset$metadata6;
|
|
3204
|
+
var dataId = _ref30.dataId,
|
|
3205
|
+
percent = _ref30.percent;
|
|
3041
3206
|
var dataset = state.datasets[dataId];
|
|
3042
|
-
if (!dataset || ((_dataset$
|
|
3207
|
+
if (!dataset || ((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshStatus) !== 'loading') {
|
|
3043
3208
|
return state;
|
|
3044
3209
|
}
|
|
3045
3210
|
var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
|
|
3046
|
-
if (((_dataset$
|
|
3211
|
+
if (((_dataset$metadata6 = dataset.metadata) === null || _dataset$metadata6 === void 0 ? void 0 : _dataset$metadata6.refreshProgress) === nextPercent) {
|
|
3047
3212
|
return state;
|
|
3048
3213
|
}
|
|
3049
3214
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
@@ -3127,10 +3292,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
|
|
|
3127
3292
|
* @memberof visStateUpdaters
|
|
3128
3293
|
* @public
|
|
3129
3294
|
*/
|
|
3130
|
-
function refreshDatasetSuccessUpdater(state,
|
|
3295
|
+
function refreshDatasetSuccessUpdater(state, _ref31) {
|
|
3131
3296
|
var _result$data;
|
|
3132
|
-
var dataId =
|
|
3133
|
-
result =
|
|
3297
|
+
var dataId = _ref31.dataId,
|
|
3298
|
+
result = _ref31.result;
|
|
3134
3299
|
var dataset = state.datasets[dataId];
|
|
3135
3300
|
if (!dataset) {
|
|
3136
3301
|
return state;
|
|
@@ -3224,10 +3389,10 @@ function normalizeDatasetRows(rows, fields) {
|
|
|
3224
3389
|
* @memberof visStateUpdaters
|
|
3225
3390
|
* @public
|
|
3226
3391
|
*/
|
|
3227
|
-
function addToDatasetUpdater(state,
|
|
3228
|
-
var dataId =
|
|
3229
|
-
rows =
|
|
3230
|
-
options =
|
|
3392
|
+
function addToDatasetUpdater(state, _ref32) {
|
|
3393
|
+
var dataId = _ref32.dataId,
|
|
3394
|
+
rows = _ref32.rows,
|
|
3395
|
+
options = _ref32.options;
|
|
3231
3396
|
var dataset = state.datasets[dataId];
|
|
3232
3397
|
if (!dataset) {
|
|
3233
3398
|
return state;
|
|
@@ -3252,10 +3417,10 @@ function addToDatasetUpdater(state, _ref31) {
|
|
|
3252
3417
|
* @memberof visStateUpdaters
|
|
3253
3418
|
* @public
|
|
3254
3419
|
*/
|
|
3255
|
-
function removeFromDatasetUpdater(state,
|
|
3256
|
-
var dataId =
|
|
3257
|
-
rowIndexes =
|
|
3258
|
-
byField =
|
|
3420
|
+
function removeFromDatasetUpdater(state, _ref33) {
|
|
3421
|
+
var dataId = _ref33.dataId,
|
|
3422
|
+
rowIndexes = _ref33.rowIndexes,
|
|
3423
|
+
byField = _ref33.byField;
|
|
3259
3424
|
var dataset = state.datasets[dataId];
|
|
3260
3425
|
if (!dataset) {
|
|
3261
3426
|
return state;
|
|
@@ -3278,9 +3443,9 @@ function removeFromDatasetUpdater(state, _ref32) {
|
|
|
3278
3443
|
* @memberof visStateUpdaters
|
|
3279
3444
|
* @public
|
|
3280
3445
|
*/
|
|
3281
|
-
function refreshDatasetErrorUpdater(state,
|
|
3282
|
-
var dataId =
|
|
3283
|
-
error =
|
|
3446
|
+
function refreshDatasetErrorUpdater(state, _ref34) {
|
|
3447
|
+
var dataId = _ref34.dataId,
|
|
3448
|
+
error = _ref34.error;
|
|
3284
3449
|
var dataset = state.datasets[dataId];
|
|
3285
3450
|
if (!dataset) {
|
|
3286
3451
|
return state;
|
|
@@ -3318,17 +3483,24 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3318
3483
|
if (!datasets.length) {
|
|
3319
3484
|
return updatedState;
|
|
3320
3485
|
}
|
|
3321
|
-
var
|
|
3486
|
+
var readyTasks = [];
|
|
3487
|
+
var remoteTasks = [];
|
|
3322
3488
|
var notificationTasks = [];
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
3489
|
+
var hydrateProgress = {};
|
|
3490
|
+
datasets.forEach(function (_ref35, datasetIndex) {
|
|
3491
|
+
var _ref35$info = _ref35.info,
|
|
3492
|
+
info = _ref35$info === void 0 ? {} : _ref35$info,
|
|
3493
|
+
rest = (0, _objectWithoutProperties2["default"])(_ref35, _excluded2);
|
|
3494
|
+
var proto = _objectSpread({
|
|
3328
3495
|
info: info
|
|
3329
|
-
}, rest)
|
|
3496
|
+
}, rest);
|
|
3497
|
+
var remote = needsExternallyHostedHydrate(proto);
|
|
3498
|
+
if (remote) {
|
|
3499
|
+
hydrateProgress[getDatasetProgressId(proto, datasetIndex)] = 0;
|
|
3500
|
+
}
|
|
3501
|
+
var task = createNewDataEntryTask(proto, state.datasets);
|
|
3330
3502
|
if (task) {
|
|
3331
|
-
|
|
3503
|
+
(remote ? remoteTasks : readyTasks).push(task);
|
|
3332
3504
|
} else {
|
|
3333
3505
|
notificationTasks.push(ACTION_TASK_ADD_NOTIFICATION().map(function () {
|
|
3334
3506
|
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
@@ -3338,24 +3510,49 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3338
3510
|
}));
|
|
3339
3511
|
}
|
|
3340
3512
|
});
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3513
|
+
|
|
3514
|
+
// Parsed datasets are committed on their own. A remote download in the same
|
|
3515
|
+
// add must not hold them until the URL finishes.
|
|
3516
|
+
var progressIds = Object.keys(hydrateProgress);
|
|
3517
|
+
var batches = [];
|
|
3518
|
+
if (readyTasks.length) {
|
|
3519
|
+
batches.push({
|
|
3520
|
+
tasks: readyTasks,
|
|
3521
|
+
progressIds: []
|
|
3345
3522
|
});
|
|
3346
|
-
}
|
|
3347
|
-
if (
|
|
3523
|
+
}
|
|
3524
|
+
if (remoteTasks.length) {
|
|
3525
|
+
batches.push({
|
|
3526
|
+
tasks: remoteTasks,
|
|
3527
|
+
progressIds: progressIds
|
|
3528
|
+
});
|
|
3529
|
+
}
|
|
3530
|
+
if (batches.length) {
|
|
3348
3531
|
updatedState = setLoadingIndicatorUpdater(updatedState, (0, _composerHelpers.payload_)({
|
|
3349
|
-
change:
|
|
3532
|
+
change: batches.length,
|
|
3350
3533
|
type: ''
|
|
3351
3534
|
}));
|
|
3535
|
+
if (progressIds.length) {
|
|
3536
|
+
updatedState = _objectSpread(_objectSpread({}, updatedState), {}, {
|
|
3537
|
+
loadingProgress: _objectSpread(_objectSpread({}, updatedState.loadingProgress), hydrateProgress)
|
|
3538
|
+
});
|
|
3539
|
+
}
|
|
3352
3540
|
}
|
|
3353
|
-
return (0, _tasks.withTask)(updatedState, [].concat((0, _toConsumableArray2["default"])(
|
|
3541
|
+
return (0, _tasks.withTask)(updatedState, [].concat((0, _toConsumableArray2["default"])(batches.map(function (batch) {
|
|
3542
|
+
return _tasks["default"].allSettled(batch.tasks).map(function (results) {
|
|
3543
|
+
return (0, _actions.createNewDatasetSuccess)({
|
|
3544
|
+
results: results,
|
|
3545
|
+
addToMapOptions: options,
|
|
3546
|
+
progressIds: batch.progressIds
|
|
3547
|
+
});
|
|
3548
|
+
});
|
|
3549
|
+
})), notificationTasks));
|
|
3354
3550
|
};
|
|
3355
3551
|
var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
|
|
3356
3552
|
var _action$payload = action.payload,
|
|
3357
3553
|
results = _action$payload.results,
|
|
3358
|
-
addToMapOptions = _action$payload.addToMapOptions
|
|
3554
|
+
addToMapOptions = _action$payload.addToMapOptions,
|
|
3555
|
+
progressIds = _action$payload.progressIds;
|
|
3359
3556
|
var notificationTasks = [];
|
|
3360
3557
|
var newDataEntries = results.reduce(function (accu, result, idx) {
|
|
3361
3558
|
if (result.status === 'fulfilled') {
|
|
@@ -3394,9 +3591,9 @@ var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = fu
|
|
|
3394
3591
|
mergers: datasetMergers,
|
|
3395
3592
|
postMergerPayload: postMergerPayload
|
|
3396
3593
|
});
|
|
3397
|
-
return (0, _tasks.withTask)(setLoadingIndicatorUpdater(updatedState, (0, _composerHelpers.payload_)({
|
|
3594
|
+
return (0, _tasks.withTask)(clearLoadingProgress(setLoadingIndicatorUpdater(updatedState, (0, _composerHelpers.payload_)({
|
|
3398
3595
|
change: -1
|
|
3399
|
-
})), notificationTasks);
|
|
3596
|
+
})), progressIds), notificationTasks);
|
|
3400
3597
|
};
|
|
3401
3598
|
|
|
3402
3599
|
/**
|
|
@@ -3603,9 +3800,16 @@ function updateDatasetPropsUpdater(state, action) {
|
|
|
3603
3800
|
// validate props: just color for now
|
|
3604
3801
|
// we only allow label, color and meta to be updated
|
|
3605
3802
|
// const newTable = copyTableAndUpdate(existing, validatedProps);
|
|
3606
|
-
|
|
3803
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3607
3804
|
datasets: _objectSpread(_objectSpread({}, datasets), {}, (0, _defineProperty2["default"])({}, dataId, (0, _table.copyTableAndUpdate)(existing, validatedProps)))
|
|
3608
3805
|
});
|
|
3806
|
+
// A tileset access token is read while formatting layer data. Refresh
|
|
3807
|
+
// only when that field changes so other metadata edits (e.g. refresh
|
|
3808
|
+
// interval) do not rebuild every layer on the dataset.
|
|
3809
|
+
if (props.metadata && 'tile3dAccessToken' in props.metadata) {
|
|
3810
|
+
return updateAllLayerDomainData(nextState, dataId);
|
|
3811
|
+
}
|
|
3812
|
+
return nextState;
|
|
3609
3813
|
}
|
|
3610
3814
|
return state;
|
|
3611
3815
|
}
|
|
@@ -3627,10 +3831,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3627
3831
|
// follow renamed columns
|
|
3628
3832
|
var columnsPatch = {};
|
|
3629
3833
|
var columnsChanged = false;
|
|
3630
|
-
Object.entries(layer.config.columns || {}).forEach(function (
|
|
3631
|
-
var
|
|
3632
|
-
ckey =
|
|
3633
|
-
col =
|
|
3834
|
+
Object.entries(layer.config.columns || {}).forEach(function (_ref36) {
|
|
3835
|
+
var _ref37 = (0, _slicedToArray2["default"])(_ref36, 2),
|
|
3836
|
+
ckey = _ref37[0],
|
|
3837
|
+
col = _ref37[1];
|
|
3634
3838
|
if (col !== null && col !== void 0 && col.value && renames[col.value]) {
|
|
3635
3839
|
columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
|
|
3636
3840
|
value: renames[col.value]
|
|
@@ -3643,8 +3847,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3643
3847
|
}
|
|
3644
3848
|
|
|
3645
3849
|
// follow renamed visual-channel fields (colorField, sizeField, ...)
|
|
3646
|
-
Object.values(layer.visualChannels).forEach(function (
|
|
3647
|
-
var field =
|
|
3850
|
+
Object.values(layer.visualChannels).forEach(function (_ref38) {
|
|
3851
|
+
var field = _ref38.field;
|
|
3648
3852
|
var fieldConfig = layer.config[field];
|
|
3649
3853
|
if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
|
|
3650
3854
|
configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
|
|
@@ -3865,34 +4069,94 @@ function closeSpecificMapAtIndex(state, action) {
|
|
|
3865
4069
|
* @memberof visStateUpdaters
|
|
3866
4070
|
* @public
|
|
3867
4071
|
*/
|
|
4072
|
+
var nextFileLoadId = 1;
|
|
4073
|
+
function createFileLoadId() {
|
|
4074
|
+
var loadId = nextFileLoadId;
|
|
4075
|
+
nextFileLoadId += 1;
|
|
4076
|
+
return loadId;
|
|
4077
|
+
}
|
|
4078
|
+
function finishFileLoad(onFinish, fileCache, options, loadId) {
|
|
4079
|
+
var action = options ? onFinish(fileCache, options) : onFinish(fileCache);
|
|
4080
|
+
return _objectSpread(_objectSpread({}, action), {}, {
|
|
4081
|
+
loadId: loadId
|
|
4082
|
+
});
|
|
4083
|
+
}
|
|
3868
4084
|
var loadFilesUpdater = exports.loadFilesUpdater = function loadFilesUpdater(state, action) {
|
|
4085
|
+
var _state$fileLoading$op;
|
|
3869
4086
|
var files = action.files,
|
|
3870
4087
|
_action$onFinish = action.onFinish,
|
|
3871
|
-
onFinish = _action$onFinish === void 0 ? _actions.loadFilesSuccess : _action$onFinish
|
|
4088
|
+
onFinish = _action$onFinish === void 0 ? _actions.loadFilesSuccess : _action$onFinish,
|
|
4089
|
+
options = action.options;
|
|
3872
4090
|
if (!files.length) {
|
|
3873
4091
|
return state;
|
|
3874
4092
|
}
|
|
3875
4093
|
var companionFiles = Array.from(files);
|
|
3876
4094
|
var filesToLoad = (0, _processors.getFilesToParse)(companionFiles);
|
|
4095
|
+
|
|
4096
|
+
// Another drop while a deferred parse is running must join that load.
|
|
4097
|
+
// Replacing `fileLoading` makes the in-flight file finish against the new
|
|
4098
|
+
// cache and drop the files that were already being parsed.
|
|
4099
|
+
if (state.fileLoading && (_state$fileLoading$op = state.fileLoading.options) !== null && _state$fileLoading$op !== void 0 && _state$fileLoading$op.deferAddToMap && options !== null && options !== void 0 && options.deferAddToMap) {
|
|
4100
|
+
return appendDeferredFileLoad(state, {
|
|
4101
|
+
filesToLoad: filesToLoad,
|
|
4102
|
+
companionFiles: companionFiles
|
|
4103
|
+
});
|
|
4104
|
+
}
|
|
3877
4105
|
if (!filesToLoad.length) {
|
|
3878
4106
|
return state;
|
|
3879
4107
|
}
|
|
4108
|
+
|
|
4109
|
+
// A deferred load is another batch for the same Add Data click. Keep files
|
|
4110
|
+
// already staged, and keep their error cards, instead of starting over.
|
|
4111
|
+
var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (_ref39) {
|
|
4112
|
+
var _ref40 = (0, _slicedToArray2["default"])(_ref39, 2),
|
|
4113
|
+
value = _ref40[1];
|
|
4114
|
+
return value === null || value === void 0 ? void 0 : value.error;
|
|
4115
|
+
})) : {};
|
|
3880
4116
|
var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
|
|
3881
4117
|
return (0, _composerHelpers.merge_)(initialFileLoadingProgress(f, i))(accu);
|
|
3882
|
-
},
|
|
3883
|
-
var fileLoading = {
|
|
4118
|
+
}, previousErrors);
|
|
4119
|
+
var fileLoading = _objectSpread({
|
|
4120
|
+
loadId: createFileLoadId(),
|
|
3884
4121
|
fileCache: [],
|
|
3885
4122
|
filesToLoad: filesToLoad,
|
|
3886
4123
|
companionFiles: companionFiles,
|
|
3887
4124
|
onFinish: onFinish
|
|
3888
|
-
}
|
|
3889
|
-
|
|
4125
|
+
}, options ? {
|
|
4126
|
+
options: options
|
|
4127
|
+
} : {});
|
|
4128
|
+
var nextState = (0, _composerHelpers.merge_)(_objectSpread({
|
|
3890
4129
|
fileLoadingProgress: fileLoadingProgress,
|
|
3891
4130
|
fileLoading: fileLoading
|
|
3892
|
-
}
|
|
4131
|
+
}, options !== null && options !== void 0 && options.deferAddToMap ? {} : {
|
|
4132
|
+
stagedToAdd: null
|
|
4133
|
+
}))(state);
|
|
3893
4134
|
return loadNextFileUpdater(nextState);
|
|
3894
4135
|
};
|
|
3895
4136
|
|
|
4137
|
+
/**
|
|
4138
|
+
* Add a drop to the deferred load that is already parsing.
|
|
4139
|
+
* The current file keeps its cache; the new files run after it.
|
|
4140
|
+
*/
|
|
4141
|
+
function appendDeferredFileLoad(state, _ref41) {
|
|
4142
|
+
var filesToLoad = _ref41.filesToLoad,
|
|
4143
|
+
companionFiles = _ref41.companionFiles;
|
|
4144
|
+
var loading = state.fileLoading;
|
|
4145
|
+
if (!loading || !filesToLoad.length && !companionFiles.length) {
|
|
4146
|
+
return state;
|
|
4147
|
+
}
|
|
4148
|
+
var fileLoadingProgress = filesToLoad.reduce(function (accu, file, index) {
|
|
4149
|
+
return (0, _composerHelpers.merge_)(initialFileLoadingProgress(file, index))(accu);
|
|
4150
|
+
}, state.fileLoadingProgress);
|
|
4151
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
4152
|
+
fileLoadingProgress: fileLoadingProgress,
|
|
4153
|
+
fileLoading: _objectSpread(_objectSpread({}, loading), {}, {
|
|
4154
|
+
filesToLoad: [].concat((0, _toConsumableArray2["default"])(Array.from(loading.filesToLoad)), (0, _toConsumableArray2["default"])(filesToLoad)),
|
|
4155
|
+
companionFiles: [].concat((0, _toConsumableArray2["default"])(loading.companionFiles || []), (0, _toConsumableArray2["default"])(companionFiles))
|
|
4156
|
+
})
|
|
4157
|
+
});
|
|
4158
|
+
}
|
|
4159
|
+
|
|
3896
4160
|
/**
|
|
3897
4161
|
* Sucessfully loaded one file, move on to the next one
|
|
3898
4162
|
* @memberof visStateUpdaters
|
|
@@ -3904,9 +4168,7 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3904
4168
|
}
|
|
3905
4169
|
var fileName = action.fileName,
|
|
3906
4170
|
fileCache = action.fileCache;
|
|
3907
|
-
var
|
|
3908
|
-
filesToLoad = _state$fileLoading.filesToLoad,
|
|
3909
|
-
onFinish = _state$fileLoading.onFinish;
|
|
4171
|
+
var loadId = state.fileLoading.loadId;
|
|
3910
4172
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
3911
4173
|
fileName: fileName,
|
|
3912
4174
|
progress: {
|
|
@@ -3919,8 +4181,11 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3919
4181
|
var stateWithCache = (0, _composerHelpers.pick_)('fileLoading')((0, _composerHelpers.merge_)({
|
|
3920
4182
|
fileCache: fileCache
|
|
3921
4183
|
}))(stateWithProgress);
|
|
3922
|
-
|
|
3923
|
-
|
|
4184
|
+
|
|
4185
|
+
// Decide after the pause, and only for this load. A drop during these
|
|
4186
|
+
// 200ms joins the queue; cancel or a newer load makes this continuation stale.
|
|
4187
|
+
return (0, _tasks.withTask)(stateWithCache, (0, _tasks.DELAY_TASK)(200).map(function () {
|
|
4188
|
+
return (0, _actions.loadNextFile)(loadId);
|
|
3924
4189
|
}));
|
|
3925
4190
|
}
|
|
3926
4191
|
|
|
@@ -3931,11 +4196,22 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3931
4196
|
* @memberof visStateUpdaters
|
|
3932
4197
|
* @public
|
|
3933
4198
|
*/
|
|
3934
|
-
function loadNextFileUpdater(state) {
|
|
3935
|
-
|
|
4199
|
+
function loadNextFileUpdater(state, action) {
|
|
4200
|
+
var loadId = action === null || action === void 0 ? void 0 : action.loadId;
|
|
4201
|
+
if (!state.fileLoading || loadId != null && state.fileLoading.loadId !== loadId) {
|
|
3936
4202
|
return state;
|
|
3937
4203
|
}
|
|
3938
|
-
var
|
|
4204
|
+
var _state$fileLoading = state.fileLoading,
|
|
4205
|
+
filesToLoad = _state$fileLoading.filesToLoad,
|
|
4206
|
+
onFinish = _state$fileLoading.onFinish,
|
|
4207
|
+
fileCache = _state$fileLoading.fileCache,
|
|
4208
|
+
options = _state$fileLoading.options,
|
|
4209
|
+
currentLoadId = _state$fileLoading.loadId;
|
|
4210
|
+
if (!filesToLoad.length) {
|
|
4211
|
+
return (0, _tasks.withTask)(state, (0, _tasks.ACTION_TASK)().map(function () {
|
|
4212
|
+
return finishFileLoad(onFinish, fileCache, options, currentLoadId);
|
|
4213
|
+
}));
|
|
4214
|
+
}
|
|
3939
4215
|
var _filesToLoad = (0, _toArray2["default"])(filesToLoad),
|
|
3940
4216
|
file = _filesToLoad[0],
|
|
3941
4217
|
remainingFilesToLoad = _filesToLoad.slice(1);
|
|
@@ -3953,36 +4229,140 @@ function loadNextFileUpdater(state) {
|
|
|
3953
4229
|
});
|
|
3954
4230
|
var loaders = state.loaders,
|
|
3955
4231
|
loadOptions = state.loadOptions;
|
|
3956
|
-
|
|
4232
|
+
if ((0, _processors.isZipFileName)(file.name)) {
|
|
4233
|
+
return (0, _tasks.withTask)(stateWithProgress, (0, _tasks.EXPAND_ZIP_TASK)({
|
|
4234
|
+
file: file,
|
|
4235
|
+
extensions: datasetExtensionsFromLoaders(loaders)
|
|
4236
|
+
}).bimap(function (expansion) {
|
|
4237
|
+
return (0, _actions.expandZipArchiveSuccess)({
|
|
4238
|
+
loadId: currentLoadId,
|
|
4239
|
+
archiveName: file.name,
|
|
4240
|
+
expansion: expansion
|
|
4241
|
+
});
|
|
4242
|
+
}, function (err) {
|
|
4243
|
+
return (0, _actions.loadFilesErr)(file.name, err, currentLoadId);
|
|
4244
|
+
}));
|
|
4245
|
+
}
|
|
4246
|
+
return (0, _tasks.withTask)(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions, nextState.fileLoading ? nextState.fileLoading.companionFiles : undefined, options));
|
|
4247
|
+
}
|
|
4248
|
+
function datasetExtensionsFromLoaders() {
|
|
4249
|
+
var loaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
4250
|
+
var extensions = [];
|
|
4251
|
+
var seen = new Set();
|
|
4252
|
+
var _iterator4 = _createForOfIteratorHelper(loaders),
|
|
4253
|
+
_step4;
|
|
4254
|
+
try {
|
|
4255
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
4256
|
+
var loader = _step4.value;
|
|
4257
|
+
var _iterator5 = _createForOfIteratorHelper((loader === null || loader === void 0 ? void 0 : loader.extensions) || []),
|
|
4258
|
+
_step5;
|
|
4259
|
+
try {
|
|
4260
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
4261
|
+
var extension = _step5.value;
|
|
4262
|
+
var ext = String(extension).replace(/^\./, '').trim().toLowerCase();
|
|
4263
|
+
if (!ext || ext === 'zip' || seen.has(ext)) {
|
|
4264
|
+
continue;
|
|
4265
|
+
}
|
|
4266
|
+
seen.add(ext);
|
|
4267
|
+
extensions.push(ext);
|
|
4268
|
+
}
|
|
4269
|
+
} catch (err) {
|
|
4270
|
+
_iterator5.e(err);
|
|
4271
|
+
} finally {
|
|
4272
|
+
_iterator5.f();
|
|
4273
|
+
}
|
|
4274
|
+
}
|
|
4275
|
+
} catch (err) {
|
|
4276
|
+
_iterator4.e(err);
|
|
4277
|
+
} finally {
|
|
4278
|
+
_iterator4.f();
|
|
4279
|
+
}
|
|
4280
|
+
return extensions;
|
|
4281
|
+
}
|
|
4282
|
+
function companionFilesForArchive(expansion, existing) {
|
|
4283
|
+
var extracted = expansion.kind === 'shapefile' ? [expansion.shapefile].concat((0, _toConsumableArray2["default"])(expansion.companions)) : [].concat((0, _toConsumableArray2["default"])(expansion.datasets), (0, _toConsumableArray2["default"])(expansion.companions));
|
|
4284
|
+
return [].concat((0, _toConsumableArray2["default"])(extracted), (0, _toConsumableArray2["default"])(existing || []));
|
|
4285
|
+
}
|
|
4286
|
+
function withoutFileLoadingProgressEntry(progress, fileName) {
|
|
4287
|
+
if (!progress || !Object.prototype.hasOwnProperty.call(progress, fileName)) {
|
|
4288
|
+
return progress;
|
|
4289
|
+
}
|
|
4290
|
+
var next = _objectSpread({}, progress);
|
|
4291
|
+
delete next[fileName];
|
|
4292
|
+
return next;
|
|
4293
|
+
}
|
|
4294
|
+
|
|
4295
|
+
/**
|
|
4296
|
+
* Apply an unpacked zip. One shapefile keeps the archive name. Any other
|
|
4297
|
+
* mix is queued as one dataset per supported member.
|
|
4298
|
+
*/
|
|
4299
|
+
function expandZipArchiveSuccessUpdater(state, action) {
|
|
4300
|
+
var loading = state.fileLoading;
|
|
4301
|
+
if (!loading || loading.loadId !== action.loadId) {
|
|
4302
|
+
return state;
|
|
4303
|
+
}
|
|
4304
|
+
var archiveName = action.archiveName,
|
|
4305
|
+
expansion = action.expansion;
|
|
4306
|
+
var companionFiles = companionFilesForArchive(expansion, loading.companionFiles);
|
|
4307
|
+
if (expansion.kind === 'shapefile') {
|
|
4308
|
+
var _nextState = (0, _composerHelpers.pick_)('fileLoading')((0, _composerHelpers.merge_)({
|
|
4309
|
+
companionFiles: companionFiles
|
|
4310
|
+
}))(state);
|
|
4311
|
+
var loaders = state.loaders,
|
|
4312
|
+
loadOptions = state.loadOptions;
|
|
4313
|
+
return (0, _tasks.withTask)(_nextState, makeLoadFileTask(expansion.shapefile, _nextState.fileLoading && _nextState.fileLoading.fileCache, loaders, loadOptions, companionFiles, loading.options, archiveName));
|
|
4314
|
+
}
|
|
4315
|
+
var datasets = expansion.datasets;
|
|
4316
|
+
var filesToLoad = [].concat((0, _toConsumableArray2["default"])(datasets), (0, _toConsumableArray2["default"])(Array.from(loading.filesToLoad)));
|
|
4317
|
+
var fileLoadingProgress = datasets.reduce(function (accu, file, index) {
|
|
4318
|
+
return (0, _composerHelpers.merge_)(initialFileLoadingProgress(file, index))(accu);
|
|
4319
|
+
}, withoutFileLoadingProgressEntry(state.fileLoadingProgress, archiveName));
|
|
4320
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4321
|
+
fileLoadingProgress: fileLoadingProgress,
|
|
4322
|
+
fileLoading: _objectSpread(_objectSpread({}, loading), {}, {
|
|
4323
|
+
filesToLoad: filesToLoad,
|
|
4324
|
+
companionFiles: companionFiles
|
|
4325
|
+
})
|
|
4326
|
+
});
|
|
4327
|
+
return loadNextFileUpdater(nextState, {
|
|
4328
|
+
loadId: action.loadId
|
|
4329
|
+
});
|
|
3957
4330
|
}
|
|
3958
4331
|
function makeLoadFileTask(file, fileCache) {
|
|
3959
4332
|
var loaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
3960
4333
|
var loadOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
3961
4334
|
var companionFiles = arguments.length > 4 ? arguments[4] : undefined;
|
|
3962
|
-
|
|
4335
|
+
var addDataOptions = arguments.length > 5 ? arguments[5] : undefined;
|
|
4336
|
+
var fileName = arguments.length > 6 ? arguments[6] : undefined;
|
|
4337
|
+
var displayName = fileName || file.name;
|
|
4338
|
+
return (0, _tasks.LOAD_FILE_TASK)(_objectSpread({
|
|
3963
4339
|
file: file,
|
|
3964
4340
|
fileCache: fileCache,
|
|
3965
4341
|
loaders: loaders,
|
|
3966
4342
|
loadOptions: loadOptions,
|
|
3967
4343
|
companionFiles: companionFiles
|
|
3968
|
-
}
|
|
4344
|
+
}, fileName ? {
|
|
4345
|
+
fileName: fileName
|
|
4346
|
+
} : {})).bimap(
|
|
3969
4347
|
// prettier ignore
|
|
3970
4348
|
// success
|
|
3971
4349
|
function (gen) {
|
|
3972
|
-
return (0, _actions.nextFileBatch)({
|
|
4350
|
+
return (0, _actions.nextFileBatch)(_objectSpread({
|
|
3973
4351
|
gen: gen,
|
|
3974
|
-
fileName:
|
|
4352
|
+
fileName: displayName,
|
|
3975
4353
|
onFinish: function onFinish(result) {
|
|
3976
4354
|
return (0, _actions.processFileContent)({
|
|
3977
4355
|
content: result,
|
|
3978
4356
|
fileCache: fileCache
|
|
3979
4357
|
});
|
|
3980
4358
|
}
|
|
3981
|
-
}
|
|
4359
|
+
}, addDataOptions ? {
|
|
4360
|
+
options: addDataOptions
|
|
4361
|
+
} : {}));
|
|
3982
4362
|
},
|
|
3983
4363
|
// error
|
|
3984
4364
|
function (err) {
|
|
3985
|
-
return (0, _actions.loadFilesErr)(
|
|
4365
|
+
return (0, _actions.loadFilesErr)(displayName, err);
|
|
3986
4366
|
});
|
|
3987
4367
|
}
|
|
3988
4368
|
|
|
@@ -4034,19 +4414,21 @@ function parseProgress() {
|
|
|
4034
4414
|
* @memberof visStateUpdaters
|
|
4035
4415
|
* @public
|
|
4036
4416
|
*/
|
|
4037
|
-
var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state,
|
|
4417
|
+
var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref42) {
|
|
4038
4418
|
var _accumulated$data;
|
|
4039
|
-
var
|
|
4040
|
-
gen =
|
|
4041
|
-
fileName =
|
|
4042
|
-
progress =
|
|
4043
|
-
accumulated =
|
|
4044
|
-
onFinish =
|
|
4419
|
+
var _ref42$payload = _ref42.payload,
|
|
4420
|
+
gen = _ref42$payload.gen,
|
|
4421
|
+
fileName = _ref42$payload.fileName,
|
|
4422
|
+
progress = _ref42$payload.progress,
|
|
4423
|
+
accumulated = _ref42$payload.accumulated,
|
|
4424
|
+
onFinish = _ref42$payload.onFinish,
|
|
4425
|
+
options = _ref42$payload.options;
|
|
4045
4426
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
4046
4427
|
fileName: fileName,
|
|
4047
4428
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
4048
4429
|
});
|
|
4049
|
-
|
|
4430
|
+
var deferAddToMap = Boolean(options === null || options === void 0 ? void 0 : options.deferAddToMap);
|
|
4431
|
+
return (0, _tasks.withTask)(stateWithProgress, [].concat((0, _toConsumableArray2["default"])((0, _utils.getApplicationConfig)().useArrowProgressiveLoading && !deferAddToMap && fileName.endsWith('arrow') && (accumulated === null || accumulated === void 0 || (_accumulated$data = accumulated.data) === null || _accumulated$data === void 0 ? void 0 : _accumulated$data.length) > 0 ? [
|
|
4050
4432
|
// Skip compaction while batches are still arriving. The completed
|
|
4051
4433
|
// file is compacted once in processFileContent.
|
|
4052
4434
|
(0, _tasks.PROCESS_FILE_DATA)({
|
|
@@ -4055,19 +4437,21 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
4055
4437
|
}),
|
|
4056
4438
|
fileCache: []
|
|
4057
4439
|
}).bimap(function (result) {
|
|
4058
|
-
return (0, _actions.loadFilesSuccess)(result);
|
|
4440
|
+
return options ? (0, _actions.loadFilesSuccess)(result, options) : (0, _actions.loadFilesSuccess)(result);
|
|
4059
4441
|
}, function (err) {
|
|
4060
4442
|
return (0, _actions.loadFilesErr)(fileName, err);
|
|
4061
|
-
})] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (
|
|
4062
|
-
var value =
|
|
4063
|
-
done =
|
|
4064
|
-
return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
|
|
4443
|
+
})] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref43) {
|
|
4444
|
+
var value = _ref43.value,
|
|
4445
|
+
done = _ref43.done;
|
|
4446
|
+
return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)(_objectSpread({
|
|
4065
4447
|
gen: gen,
|
|
4066
4448
|
fileName: fileName,
|
|
4067
4449
|
progress: value.progress,
|
|
4068
4450
|
accumulated: value,
|
|
4069
4451
|
onFinish: onFinish
|
|
4070
|
-
}
|
|
4452
|
+
}, options ? {
|
|
4453
|
+
options: options
|
|
4454
|
+
} : {}));
|
|
4071
4455
|
}, function (err) {
|
|
4072
4456
|
return (0, _actions.loadFilesErr)(fileName, err);
|
|
4073
4457
|
})]));
|
|
@@ -4078,18 +4462,28 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
4078
4462
|
* @memberof visStateUpdaters
|
|
4079
4463
|
* @public
|
|
4080
4464
|
*/
|
|
4081
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4465
|
+
/**
|
|
4466
|
+
* Drop files waiting on the Add Data button and abort an in-progress modal load.
|
|
4467
|
+
* @memberof visStateUpdaters
|
|
4468
|
+
* @public
|
|
4469
|
+
*/
|
|
4470
|
+
var clearStagedLoadedFilesUpdater = exports.clearStagedLoadedFilesUpdater = function clearStagedLoadedFilesUpdater(state) {
|
|
4471
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
4472
|
+
fileLoading: false,
|
|
4473
|
+
fileLoadingProgress: {},
|
|
4474
|
+
stagedToAdd: null
|
|
4475
|
+
});
|
|
4476
|
+
};
|
|
4477
|
+
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref44) {
|
|
4478
|
+
var error = _ref44.error,
|
|
4479
|
+
fileName = _ref44.fileName,
|
|
4480
|
+
errorLoadId = _ref44.loadId;
|
|
4481
|
+
if (!state.fileLoading || errorLoadId != null && state.fileLoading.loadId !== errorLoadId) {
|
|
4087
4482
|
return state;
|
|
4088
4483
|
}
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
|
|
4092
|
-
fileCache = _state$fileLoading2.fileCache;
|
|
4484
|
+
// update ui with error message
|
|
4485
|
+
_window.console.warn(error);
|
|
4486
|
+
var loadId = state.fileLoading.loadId;
|
|
4093
4487
|
var nextState = updateFileLoadingProgressUpdater(state, {
|
|
4094
4488
|
fileName: fileName,
|
|
4095
4489
|
progress: {
|
|
@@ -4097,9 +4491,9 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
|
|
|
4097
4491
|
}
|
|
4098
4492
|
});
|
|
4099
4493
|
|
|
4100
|
-
//
|
|
4101
|
-
return (0, _tasks.withTask)(nextState, (0, _tasks.DELAY_TASK)(200).map(
|
|
4102
|
-
return
|
|
4494
|
+
// Same pause as a successful file. Re-check this load's queue when it ends.
|
|
4495
|
+
return (0, _tasks.withTask)(nextState, (0, _tasks.DELAY_TASK)(200).map(function () {
|
|
4496
|
+
return (0, _actions.loadNextFile)(loadId);
|
|
4103
4497
|
}));
|
|
4104
4498
|
};
|
|
4105
4499
|
|
|
@@ -4108,8 +4502,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
|
|
|
4108
4502
|
* @memberof visStateUpdaters
|
|
4109
4503
|
* @public
|
|
4110
4504
|
*/
|
|
4111
|
-
var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state,
|
|
4112
|
-
var dataId =
|
|
4505
|
+
var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref45) {
|
|
4506
|
+
var dataId = _ref45.dataId;
|
|
4113
4507
|
// apply cpuFilter
|
|
4114
4508
|
var dataIds = (0, _commonUtils.toArray)(dataId);
|
|
4115
4509
|
return dataIds.reduce(function (accu, id) {
|
|
@@ -4168,9 +4562,9 @@ function initialFileLoadingProgress(file, index) {
|
|
|
4168
4562
|
error: null
|
|
4169
4563
|
});
|
|
4170
4564
|
}
|
|
4171
|
-
function updateFileLoadingProgressUpdater(state,
|
|
4172
|
-
var fileName =
|
|
4173
|
-
progress =
|
|
4565
|
+
function updateFileLoadingProgressUpdater(state, _ref47) {
|
|
4566
|
+
var fileName = _ref47.fileName,
|
|
4567
|
+
progress = _ref47.progress;
|
|
4174
4568
|
// @ts-expect-error
|
|
4175
4569
|
return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
|
|
4176
4570
|
}
|
|
@@ -4262,8 +4656,8 @@ function updateAnimationDomain(state) {
|
|
|
4262
4656
|
* Update the status of the editor
|
|
4263
4657
|
* @memberof visStateUpdaters
|
|
4264
4658
|
*/
|
|
4265
|
-
var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state,
|
|
4266
|
-
var mode =
|
|
4659
|
+
var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref48) {
|
|
4660
|
+
var mode = _ref48.mode;
|
|
4267
4661
|
var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
|
|
4268
4662
|
if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
|
|
4269
4663
|
return state;
|
|
@@ -4281,10 +4675,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
|
|
|
4281
4675
|
* Update editor features
|
|
4282
4676
|
* @memberof visStateUpdaters
|
|
4283
4677
|
*/
|
|
4284
|
-
function setFeaturesUpdater(state,
|
|
4678
|
+
function setFeaturesUpdater(state, _ref49) {
|
|
4285
4679
|
var _lastFeature$properti, _lastFeature$properti2;
|
|
4286
|
-
var
|
|
4287
|
-
features =
|
|
4680
|
+
var _ref49$features = _ref49.features,
|
|
4681
|
+
features = _ref49$features === void 0 ? [] : _ref49$features;
|
|
4288
4682
|
var lastFeature = features.length && features[features.length - 1];
|
|
4289
4683
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4290
4684
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
@@ -4357,10 +4751,10 @@ function findEditorFeature(state, feature) {
|
|
|
4357
4751
|
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
4358
4752
|
* @memberof visStateUpdaters
|
|
4359
4753
|
*/
|
|
4360
|
-
function setEditorFeaturePropertiesUpdater(state,
|
|
4754
|
+
function setEditorFeaturePropertiesUpdater(state, _ref50) {
|
|
4361
4755
|
var _state$editor$selecte2;
|
|
4362
|
-
var feature =
|
|
4363
|
-
properties =
|
|
4756
|
+
var feature = _ref50.feature,
|
|
4757
|
+
properties = _ref50.properties;
|
|
4364
4758
|
if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
|
|
4365
4759
|
return state;
|
|
4366
4760
|
}
|
|
@@ -4399,9 +4793,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref46) {
|
|
|
4399
4793
|
* Set the current selected feature
|
|
4400
4794
|
* @memberof uiStateUpdaters
|
|
4401
4795
|
*/
|
|
4402
|
-
var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
4403
|
-
var feature =
|
|
4404
|
-
selectionContext =
|
|
4796
|
+
var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref51) {
|
|
4797
|
+
var feature = _ref51.feature,
|
|
4798
|
+
selectionContext = _ref51.selectionContext;
|
|
4405
4799
|
// add bbox for polygon filter to speed up filtering
|
|
4406
4800
|
var selectedFeature = feature;
|
|
4407
4801
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -4423,8 +4817,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
|
|
|
4423
4817
|
* Delete existing feature from filters
|
|
4424
4818
|
* @memberof visStateUpdaters
|
|
4425
4819
|
*/
|
|
4426
|
-
function deleteFeatureUpdater(state,
|
|
4427
|
-
var feature =
|
|
4820
|
+
function deleteFeatureUpdater(state, _ref52) {
|
|
4821
|
+
var feature = _ref52.feature;
|
|
4428
4822
|
if (!feature) {
|
|
4429
4823
|
return state;
|
|
4430
4824
|
}
|
|
@@ -4569,10 +4963,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
4569
4963
|
* @memberof visStateUpdaters
|
|
4570
4964
|
* @public
|
|
4571
4965
|
*/
|
|
4572
|
-
function sortTableColumnUpdater(state,
|
|
4573
|
-
var dataId =
|
|
4574
|
-
column =
|
|
4575
|
-
mode =
|
|
4966
|
+
function sortTableColumnUpdater(state, _ref53) {
|
|
4967
|
+
var dataId = _ref53.dataId,
|
|
4968
|
+
column = _ref53.column,
|
|
4969
|
+
mode = _ref53.mode;
|
|
4576
4970
|
var dataset = state.datasets[dataId];
|
|
4577
4971
|
if (!dataset) {
|
|
4578
4972
|
return state;
|
|
@@ -4593,9 +4987,9 @@ function sortTableColumnUpdater(state, _ref49) {
|
|
|
4593
4987
|
* @memberof visStateUpdaters
|
|
4594
4988
|
* @public
|
|
4595
4989
|
*/
|
|
4596
|
-
function pinTableColumnUpdater(state,
|
|
4597
|
-
var dataId =
|
|
4598
|
-
column =
|
|
4990
|
+
function pinTableColumnUpdater(state, _ref54) {
|
|
4991
|
+
var dataId = _ref54.dataId,
|
|
4992
|
+
column = _ref54.column;
|
|
4599
4993
|
var dataset = state.datasets[dataId];
|
|
4600
4994
|
if (!dataset) {
|
|
4601
4995
|
return state;
|
|
@@ -4609,9 +5003,9 @@ function pinTableColumnUpdater(state, _ref50) {
|
|
|
4609
5003
|
* @memberof visStateUpdaters
|
|
4610
5004
|
* @public
|
|
4611
5005
|
*/
|
|
4612
|
-
function copyTableColumnUpdater(state,
|
|
4613
|
-
var dataId =
|
|
4614
|
-
column =
|
|
5006
|
+
function copyTableColumnUpdater(state, _ref55) {
|
|
5007
|
+
var dataId = _ref55.dataId,
|
|
5008
|
+
column = _ref55.column;
|
|
4615
5009
|
var dataset = state.datasets[dataId];
|
|
4616
5010
|
if (!dataset) {
|
|
4617
5011
|
return state;
|
|
@@ -4635,9 +5029,9 @@ function copyTableColumnUpdater(state, _ref51) {
|
|
|
4635
5029
|
* @memberof visStateUpdaters
|
|
4636
5030
|
* @public
|
|
4637
5031
|
*/
|
|
4638
|
-
function setColumnDisplayFormatUpdater(state,
|
|
4639
|
-
var dataId =
|
|
4640
|
-
formats =
|
|
5032
|
+
function setColumnDisplayFormatUpdater(state, _ref56) {
|
|
5033
|
+
var dataId = _ref56.dataId,
|
|
5034
|
+
formats = _ref56.formats;
|
|
4641
5035
|
var dataset = state.datasets[dataId];
|
|
4642
5036
|
if (!dataset) {
|
|
4643
5037
|
return state;
|
|
@@ -4688,12 +5082,12 @@ function requestDatasetColumnStatistics(_x4) {
|
|
|
4688
5082
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
4689
5083
|
}
|
|
4690
5084
|
function _requestDatasetColumnStatistics() {
|
|
4691
|
-
_requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(
|
|
5085
|
+
_requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref57) {
|
|
4692
5086
|
var dataset, field, filterProps, mappedValue, values, result;
|
|
4693
5087
|
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
4694
5088
|
while (1) switch (_context4.prev = _context4.next) {
|
|
4695
5089
|
case 0:
|
|
4696
|
-
dataset =
|
|
5090
|
+
dataset = _ref57.dataset, field = _ref57.field;
|
|
4697
5091
|
_context4.next = 3;
|
|
4698
5092
|
return yieldForPaint();
|
|
4699
5093
|
case 3:
|
|
@@ -4726,9 +5120,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
|
|
|
4726
5120
|
* @memberof visStateUpdaters
|
|
4727
5121
|
* @public
|
|
4728
5122
|
*/
|
|
4729
|
-
function loadColumnStatsUpdater(state,
|
|
4730
|
-
var dataId =
|
|
4731
|
-
fieldName =
|
|
5123
|
+
function loadColumnStatsUpdater(state, _ref58) {
|
|
5124
|
+
var dataId = _ref58.dataId,
|
|
5125
|
+
fieldName = _ref58.fieldName;
|
|
4732
5126
|
var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
|
|
4733
5127
|
var dataset = state.datasets[dataId];
|
|
4734
5128
|
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
@@ -4749,9 +5143,9 @@ function loadColumnStatsUpdater(state, _ref54) {
|
|
|
4749
5143
|
return LOAD_COLUMN_STATS_TASK({
|
|
4750
5144
|
dataset: newDataset,
|
|
4751
5145
|
field: f
|
|
4752
|
-
}).bimap(function (
|
|
4753
|
-
var result =
|
|
4754
|
-
filterProps =
|
|
5146
|
+
}).bimap(function (_ref59) {
|
|
5147
|
+
var result = _ref59.result,
|
|
5148
|
+
filterProps = _ref59.filterProps;
|
|
4755
5149
|
return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
|
|
4756
5150
|
}, function (error) {
|
|
4757
5151
|
return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
|
|
@@ -4766,11 +5160,11 @@ function loadColumnStatsUpdater(state, _ref54) {
|
|
|
4766
5160
|
* @memberof visStateUpdaters
|
|
4767
5161
|
* @public
|
|
4768
5162
|
*/
|
|
4769
|
-
function loadColumnStatsSuccessUpdater(state,
|
|
4770
|
-
var result =
|
|
4771
|
-
filterProps =
|
|
4772
|
-
dataId =
|
|
4773
|
-
fieldName =
|
|
5163
|
+
function loadColumnStatsSuccessUpdater(state, _ref60) {
|
|
5164
|
+
var result = _ref60.result,
|
|
5165
|
+
filterProps = _ref60.filterProps,
|
|
5166
|
+
dataId = _ref60.dataId,
|
|
5167
|
+
fieldName = _ref60.fieldName;
|
|
4774
5168
|
var dataset = state.datasets[dataId];
|
|
4775
5169
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
4776
5170
|
return f.name === fieldName;
|
|
@@ -4798,10 +5192,10 @@ function loadColumnStatsSuccessUpdater(state, _ref56) {
|
|
|
4798
5192
|
* @memberof visStateUpdaters
|
|
4799
5193
|
* @public
|
|
4800
5194
|
*/
|
|
4801
|
-
function loadColumnStatsErrorUpdater(state,
|
|
4802
|
-
var error =
|
|
4803
|
-
dataId =
|
|
4804
|
-
fieldName =
|
|
5195
|
+
function loadColumnStatsErrorUpdater(state, _ref61) {
|
|
5196
|
+
var error = _ref61.error,
|
|
5197
|
+
dataId = _ref61.dataId,
|
|
5198
|
+
fieldName = _ref61.fieldName;
|
|
4805
5199
|
_window.console.error(error);
|
|
4806
5200
|
var dataset = state.datasets[dataId];
|
|
4807
5201
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
@@ -4885,10 +5279,11 @@ _action) {
|
|
|
4885
5279
|
|
|
4886
5280
|
/**
|
|
4887
5281
|
* Copy in-memory rows (or loaded vector-tile features) inside the selected
|
|
4888
|
-
* Draw on Map polygon into a new dataset.
|
|
5282
|
+
* Draw on Map polygon into a new dataset. Raster tiles download a PNG clip and a
|
|
5283
|
+
* GeoJSON sidecar (bbox rectangle + stats) instead of creating a dataset.
|
|
4889
5284
|
*/
|
|
4890
|
-
function extractDataFromFeatureUpdater(state,
|
|
4891
|
-
var layerId =
|
|
5285
|
+
function extractDataFromFeatureUpdater(state, _ref62) {
|
|
5286
|
+
var layerId = _ref62.layerId;
|
|
4892
5287
|
var feature = state.editor.selectedFeature;
|
|
4893
5288
|
var layer = state.layers.find(function (l) {
|
|
4894
5289
|
return l.id === layerId;
|
|
@@ -4898,10 +5293,11 @@ function extractDataFromFeatureUpdater(state, _ref58) {
|
|
|
4898
5293
|
if (!layer || !dataset || !dataId) {
|
|
4899
5294
|
return state;
|
|
4900
5295
|
}
|
|
5296
|
+
var isTiledExtract = (0, _utils.isVectorTileExtractLayer)(layer) || (0, _utils.isRasterTileExtractLayer)(layer);
|
|
4901
5297
|
|
|
4902
5298
|
// GPU range/time filters are not reflected in filteredIndex; evaluate them on CPU
|
|
4903
5299
|
// the same way export data does, then clip the result to the drawing.
|
|
4904
|
-
if (!
|
|
5300
|
+
if (!isTiledExtract) {
|
|
4905
5301
|
state = (0, _utils.filterDatasetCPU)(state, dataId);
|
|
4906
5302
|
dataset = state.datasets[dataId];
|
|
4907
5303
|
if (!dataset) {
|
|
@@ -4930,11 +5326,32 @@ function extractDataFromFeatureUpdater(state, _ref58) {
|
|
|
4930
5326
|
if (!extracted.rowCount) {
|
|
4931
5327
|
return (0, _tasks.withTask)(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
|
|
4932
5328
|
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
4933
|
-
message: (0, _utils.isVectorTileExtractLayer)(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
|
|
5329
|
+
message: (0, _utils.isRasterTileExtractLayer)(layer) ? 'No loaded raster pixels found inside the selected drawing' : (0, _utils.isVectorTileExtractLayer)(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
|
|
4934
5330
|
id: 'extract-data-from-feature-empty'
|
|
4935
5331
|
}));
|
|
4936
5332
|
}));
|
|
4937
5333
|
}
|
|
5334
|
+
if ((0, _utils.isRasterTileExtractLayer)(layer)) {
|
|
5335
|
+
var polygon = feature;
|
|
5336
|
+
var download = typeof layer.downloadClip === 'function' ? Promise.resolve(layer.downloadClip(polygon)) : Promise.resolve({
|
|
5337
|
+
png: false,
|
|
5338
|
+
json: false
|
|
5339
|
+
});
|
|
5340
|
+
return (0, _tasks.withTask)(state, (0, _tasks.UNWRAP_TASK)(download).bimap(function (result) {
|
|
5341
|
+
return (0, _actions.addNotification)(result !== null && result !== void 0 && result.png ? (0, _utils.successNotification)({
|
|
5342
|
+
message: 'Downloaded raster clip image and stats file',
|
|
5343
|
+
id: 'extract-raster-clip'
|
|
5344
|
+
}) : (0, _utils.errorNotification)({
|
|
5345
|
+
message: 'Failed to download raster clip image',
|
|
5346
|
+
id: 'extract-raster-clip'
|
|
5347
|
+
}));
|
|
5348
|
+
}, function (err) {
|
|
5349
|
+
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
5350
|
+
message: "Failed to download raster clip: ".concat(err instanceof Error ? err.message : String(err)),
|
|
5351
|
+
id: 'extract-raster-clip'
|
|
5352
|
+
}));
|
|
5353
|
+
}));
|
|
5354
|
+
}
|
|
4938
5355
|
var data;
|
|
4939
5356
|
try {
|
|
4940
5357
|
data = extracted.kind === 'geojson' ? (0, _processors.processGeojson)({
|
|
@@ -4968,9 +5385,9 @@ function extractDataFromFeatureUpdater(state, _ref58) {
|
|
|
4968
5385
|
}
|
|
4969
5386
|
});
|
|
4970
5387
|
}
|
|
4971
|
-
function setFilterAnimationTimeConfigUpdater(state,
|
|
4972
|
-
var idx =
|
|
4973
|
-
config =
|
|
5388
|
+
function setFilterAnimationTimeConfigUpdater(state, _ref63) {
|
|
5389
|
+
var idx = _ref63.idx,
|
|
5390
|
+
config = _ref63.config;
|
|
4974
5391
|
var oldFilter = state.filters[idx];
|
|
4975
5392
|
if (!oldFilter) {
|
|
4976
5393
|
_window.console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -5000,8 +5417,8 @@ function checkTimeConfigArgs(config) {
|
|
|
5000
5417
|
/**
|
|
5001
5418
|
* Update editor
|
|
5002
5419
|
*/
|
|
5003
|
-
function setLayerAnimationTimeConfigUpdater(state,
|
|
5004
|
-
var config =
|
|
5420
|
+
function setLayerAnimationTimeConfigUpdater(state, _ref64) {
|
|
5421
|
+
var config = _ref64.config;
|
|
5005
5422
|
if (!config) {
|
|
5006
5423
|
return state;
|
|
5007
5424
|
}
|
|
@@ -5199,16 +5616,45 @@ function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
5199
5616
|
* @returns nextState
|
|
5200
5617
|
* @public
|
|
5201
5618
|
*/
|
|
5202
|
-
var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
5203
|
-
var change =
|
|
5619
|
+
var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref65) {
|
|
5620
|
+
var change = _ref65.payload.change;
|
|
5204
5621
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
5205
5622
|
if (!loadingIndicatorValue) {
|
|
5206
5623
|
loadingIndicatorValue = 0;
|
|
5207
5624
|
}
|
|
5625
|
+
var nextValue = Math.max(loadingIndicatorValue + change, 0);
|
|
5208
5626
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
5209
|
-
loadingIndicatorValue:
|
|
5210
|
-
})
|
|
5627
|
+
loadingIndicatorValue: nextValue
|
|
5628
|
+
}, nextValue === 0 && (Object.keys(state.loadingProgress || {}).length || Object.keys(state.loadingProcessing || {}).length) ? {
|
|
5629
|
+
loadingProgress: {},
|
|
5630
|
+
loadingProcessing: {}
|
|
5631
|
+
} : {});
|
|
5211
5632
|
};
|
|
5633
|
+
|
|
5634
|
+
/**
|
|
5635
|
+
* Record download progress for an in-flight remote dataset hydrate.
|
|
5636
|
+
* @memberof visStateUpdaters
|
|
5637
|
+
* @public
|
|
5638
|
+
*/
|
|
5639
|
+
function setLoadingProgressUpdater(state, _ref66) {
|
|
5640
|
+
var _state$loadingProgres, _state$loadingProcess;
|
|
5641
|
+
var id = _ref66.id,
|
|
5642
|
+
percent = _ref66.percent,
|
|
5643
|
+
phase = _ref66.phase;
|
|
5644
|
+
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
5645
|
+
return state;
|
|
5646
|
+
}
|
|
5647
|
+
var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
|
|
5648
|
+
var processing = phase === 'processing';
|
|
5649
|
+
if (((_state$loadingProgres = state.loadingProgress) === null || _state$loadingProgres === void 0 ? void 0 : _state$loadingProgres[id]) === nextPercent && Boolean((_state$loadingProcess = state.loadingProcessing) === null || _state$loadingProcess === void 0 ? void 0 : _state$loadingProcess[id]) === processing) {
|
|
5650
|
+
return state;
|
|
5651
|
+
}
|
|
5652
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
5653
|
+
loadingProgress: _objectSpread(_objectSpread({}, state.loadingProgress), {}, (0, _defineProperty2["default"])({}, id, nextPercent))
|
|
5654
|
+
}, processing ? {
|
|
5655
|
+
loadingProcessing: _objectSpread(_objectSpread({}, state.loadingProcessing), {}, (0, _defineProperty2["default"])({}, id, true))
|
|
5656
|
+
} : {});
|
|
5657
|
+
}
|
|
5212
5658
|
function adjustAnimationConfigWithFilter(state, filterIdx) {
|
|
5213
5659
|
var filter = state.filters[filterIdx];
|
|
5214
5660
|
if (filter.syncedWithLayerTimeline) {
|
|
@@ -5311,22 +5757,19 @@ function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
|
|
|
5311
5757
|
function findChildDatasetIds(value) {
|
|
5312
5758
|
var _value$newDataset;
|
|
5313
5759
|
if (Array.isArray(value)) {
|
|
5314
|
-
// for layers, filters, call defaultReplaceParentDatasetIds on each item in array
|
|
5315
5760
|
var childDataIds = value.map(findChildDatasetIds).filter(function (d) {
|
|
5316
5761
|
return d;
|
|
5317
5762
|
});
|
|
5318
5763
|
return childDataIds.length ? childDataIds : null;
|
|
5319
5764
|
}
|
|
5320
|
-
|
|
5321
|
-
// child data id usually stores in the derived dataset info
|
|
5322
5765
|
return (value === null || value === void 0 || (_value$newDataset = value.newDataset) === null || _value$newDataset === void 0 ? void 0 : _value$newDataset.info.id) || null;
|
|
5323
5766
|
}
|
|
5324
5767
|
|
|
5325
5768
|
// moved unmerged layers, filters, interactions
|
|
5326
|
-
function moveValueToBeMerged(state, propValues,
|
|
5327
|
-
var prop =
|
|
5328
|
-
toMergeProp =
|
|
5329
|
-
saveUnmerged =
|
|
5769
|
+
function moveValueToBeMerged(state, propValues, _ref68) {
|
|
5770
|
+
var prop = _ref68.prop,
|
|
5771
|
+
toMergeProp = _ref68.toMergeProp,
|
|
5772
|
+
saveUnmerged = _ref68.saveUnmerged;
|
|
5330
5773
|
// remove prop value from state
|
|
5331
5774
|
// TODO: should we add remove updater to merger as well?
|
|
5332
5775
|
if (!propValues) {
|
|
@@ -5355,23 +5798,33 @@ function moveValueToBeMerged(state, propValues, _ref63) {
|
|
|
5355
5798
|
return _objectSpread(_objectSpread({}, stateRemoved), toBeMerged);
|
|
5356
5799
|
}
|
|
5357
5800
|
function replaceDatasetAndDeps(state, dataId, dataIdToUse) {
|
|
5801
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
5802
|
+
// The same id means the new table occupies the old slot, so the previous rows have to go.
|
|
5803
|
+
var deleteOriginalDataset = options.deleteOriginalDataset !== false || dataId === dataIdToUse;
|
|
5358
5804
|
return (0, _composerHelpers.compose_)([(0, _composerHelpers.apply_)(replaceDatasetDepsInState, {
|
|
5359
5805
|
dataId: dataId,
|
|
5360
5806
|
dataIdToUse: dataIdToUse
|
|
5361
|
-
}), (0, _composerHelpers.apply_)(removeDatasetUpdater, {
|
|
5807
|
+
}), (0, _composerHelpers.if_)(deleteOriginalDataset, (0, _composerHelpers.apply_)(removeDatasetUpdater, {
|
|
5362
5808
|
dataId: dataId
|
|
5363
|
-
})])(state);
|
|
5809
|
+
}))])(state);
|
|
5364
5810
|
}
|
|
5365
5811
|
function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
|
|
5366
5812
|
var _nextState$layerToBeM;
|
|
5813
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
5367
5814
|
var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
|
|
5368
|
-
var
|
|
5815
|
+
var deleteOriginalDataset = options.deleteOriginalDataset !== false || dataId === dataIdToUse;
|
|
5816
|
+
var nextState = replaceDatasetAndDeps(state, dataId, dataIdToUse, {
|
|
5817
|
+
deleteOriginalDataset: deleteOriginalDataset
|
|
5818
|
+
});
|
|
5369
5819
|
// make a copy of layerOrder, because layer id will be removed from it by calling removeLayerUpdater
|
|
5370
5820
|
var preserveLayerOrder = (0, _toConsumableArray2["default"])(state.layerOrder);
|
|
5371
5821
|
|
|
5372
|
-
//
|
|
5373
|
-
nextState.preserveDatasetOrder = Object.keys(state.datasets).
|
|
5374
|
-
|
|
5822
|
+
// When the original table stays, the replacement takes its place and the original follows it.
|
|
5823
|
+
nextState.preserveDatasetOrder = Object.keys(state.datasets).flatMap(function (d) {
|
|
5824
|
+
if (d !== dataId) {
|
|
5825
|
+
return [d];
|
|
5826
|
+
}
|
|
5827
|
+
return deleteOriginalDataset ? [dataIdToUse] : [dataIdToUse, d];
|
|
5375
5828
|
});
|
|
5376
5829
|
|
|
5377
5830
|
// preserveLayerOrder
|
|
@@ -5418,17 +5871,17 @@ function preservedOrderWithParked() {
|
|
|
5418
5871
|
});
|
|
5419
5872
|
return [].concat((0, _toConsumableArray2["default"])(ordered), (0, _toConsumableArray2["default"])(rest));
|
|
5420
5873
|
}
|
|
5421
|
-
function replaceDatasetDepsInState(state,
|
|
5422
|
-
var dataId =
|
|
5423
|
-
dataIdToUse =
|
|
5874
|
+
function replaceDatasetDepsInState(state, _ref69) {
|
|
5875
|
+
var dataId = _ref69.dataId,
|
|
5876
|
+
dataIdToUse = _ref69.dataIdToUse;
|
|
5424
5877
|
var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
|
|
5425
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
5426
|
-
var prop =
|
|
5427
|
-
toMergeProp =
|
|
5428
|
-
replaceParentDatasetIds =
|
|
5429
|
-
getChildDatasetIds =
|
|
5430
|
-
saveUnmerged =
|
|
5431
|
-
preserveOrder =
|
|
5878
|
+
var nextState = state.mergers.reduce(function (accuState, _ref70) {
|
|
5879
|
+
var prop = _ref70.prop,
|
|
5880
|
+
toMergeProp = _ref70.toMergeProp,
|
|
5881
|
+
replaceParentDatasetIds = _ref70.replaceParentDatasetIds,
|
|
5882
|
+
getChildDatasetIds = _ref70.getChildDatasetIds,
|
|
5883
|
+
saveUnmerged = _ref70.saveUnmerged,
|
|
5884
|
+
preserveOrder = _ref70.preserveOrder;
|
|
5432
5885
|
// get dataset ids that are depends on this dataset
|
|
5433
5886
|
var props = (0, _commonUtils.toArray)(prop);
|
|
5434
5887
|
var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
|
|
@@ -5468,11 +5921,11 @@ function replaceDatasetDepsInState(state, _ref64) {
|
|
|
5468
5921
|
}, state);
|
|
5469
5922
|
return nextState;
|
|
5470
5923
|
}
|
|
5471
|
-
function replacePropValueInState(state, replacedItem,
|
|
5472
|
-
var prop =
|
|
5473
|
-
toMergeProp =
|
|
5474
|
-
getChildDatasetIds =
|
|
5475
|
-
saveUnmerged =
|
|
5924
|
+
function replacePropValueInState(state, replacedItem, _ref71) {
|
|
5925
|
+
var prop = _ref71.prop,
|
|
5926
|
+
toMergeProp = _ref71.toMergeProp,
|
|
5927
|
+
getChildDatasetIds = _ref71.getChildDatasetIds,
|
|
5928
|
+
saveUnmerged = _ref71.saveUnmerged;
|
|
5476
5929
|
// prop is depends on the dataset to be replaced
|
|
5477
5930
|
// remove prop from state, and move it to toBeMerged
|
|
5478
5931
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -5490,4 +5943,50 @@ function replacePropValueInState(state, replacedItem, _ref66) {
|
|
|
5490
5943
|
}
|
|
5491
5944
|
return nextState;
|
|
5492
5945
|
}
|
|
5493
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIyIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjMiLCJfcmVmMjMkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjMkcGF5bG9hZCRjb25maWciLCJfcmVmMjMkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyNCIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjI1IiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjYiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjciLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyOCIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyOSIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzAiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzEiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMyIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzQiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzQkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiZGVlcG1lcmdlIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzUiLCJfcmVmMzYiLCJja2V5IiwiY29sIiwiX3JlZjM3IiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9yZW5hbWVzJGYkbmFtZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM4IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzgkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM5IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWY0MCIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDEiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQzIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ0Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ1IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0NSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQ2IiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0NyIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0OCIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OSIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MCIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTEiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjUyIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjUzIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjU0IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTUiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1NiIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTciLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0ZWQiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU5IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY2MCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjYxIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjMiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwiaWRzIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjY0IiwiYWNjdVN0YXRlIiwiX3JlZjY1IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjY2IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIGlzU2F2ZWRMYXllckNvbmZpZ1YxLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtnZXRGaWxlc1RvUGFyc2UsIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCwgcHJvY2Vzc0dlb2pzb259IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgRmVhdHVyZSxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXQsXG4gIENoYXJ0Q29uZmlnLFxuICBMYXllckNoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyBkaXNhYmxlIHN0YWNrIGNhcHR1cmUgZm9yIHdpdGhUYXNrIGNhbGxzIHRoYXQgaGFwcGVuIG91dHNpZGUgc3RyaWN0IHJlZHVjZXIgY29udGV4dFxuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gaXNTYXZlZExheWVyQ29uZmlnVjEobmV3TGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpXG4gICAgOiBuZXdMYXllckNvbmZpZztcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmLFxuICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbihcbiAgICAgICAgdGV4dExhYmVsLmZpbmQodGwgPT4gdGwuY29sbGlzaW9uRW5hYmxlZCk/LmNvbGxpc2lvbkVuYWJsZWQgPz9cbiAgICAgICAgICBkZWZhdWx0VGV4dExhYmVsLmNvbGxpc2lvbkVuYWJsZWRcbiAgICAgIClcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICB7XG4gICAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4odGV4dExhYmVsWzBdPy5jb2xsaXNpb25FbmFibGVkKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIGlmIChpZHggPT09ICdhbGwnICYmIHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKHRsID0+ICh7Li4udGwsIFtwcm9wXTogdmFsdWV9KSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIC8vIEplbmtzIGJyZWFrcyBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBjb2xvcnMuIFJlY2FsY3VsYXRlIHRoZSBkb21haW4gd2hlblxuICAvLyB0aGUgY29sb3IgcmFuZ2Ugb2YgYSBKZW5rcyBjaGFubmVsIGNoYW5nZXMuXG4gIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICBPYmplY3Qua2V5cyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IG5ld0xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbm5lbD8uc2NhbGUgJiZcbiAgICAgICAgICBuZXdMYXllci5jb25maWdbY2hhbm5lbC5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmplbmtzICYmXG4gICAgICAgICAgY2hhbm5lbC5yYW5nZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24ubmV3VmlzQ29uZmlnLCBjaGFubmVsLnJhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFtcbiAgICAnZGF0YUlkJyxcbiAgICAnbmFtZScsXG4gICAgJ2ZpZWxkSWR4JyxcbiAgICAnZ3B1Q2hhbm5lbCcsXG4gICAgJ2VuZE5hbWUnLFxuICAgICdlbmRGaWVsZElkeCcsXG4gICAgJ2VuZE1hcHBlZFZhbHVlJyxcbiAgICAnZ3B1RW5kQ2hhbm5lbCdcbiAgXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4oXG4gICAgcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgY2hhcnQgPT4gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSAmJiBjaGFydC5sYXllcklkID09PSBsYXllclRvUmVtb3ZlLmlkXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnKTogY2hhcnQgaXMgTGF5ZXJDaGFydENvbmZpZyB7XG4gIHJldHVybiBjaGFydC50eXBlID09PSAnbGF5ZXJDaGFydCc7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnLCBwcm9wczogUGFydGlhbDxDaGFydENvbmZpZz4pOiBDaGFydENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY2hhcnQsXG4gICAgLi4ucHJvcHMsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgIC4uLihwcm9wcy5kaXNwbGF5IHx8IHt9KVxuICAgIH0sXG4gICAgY2hhcnREaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5jaGFydERpc3BsYXksXG4gICAgICAuLi4oKHByb3BzIGFzIENoYXJ0Q29uZmlnKS5jaGFydERpc3BsYXkgfHwge30pXG4gICAgfVxuICB9IGFzIENoYXJ0Q29uZmlnO1xufVxuXG5mdW5jdGlvbiBheGlzRmllbGRJZlByZXNlbnQ8VCBleHRlbmRzIHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbDsgdGl0bGU/OiBzdHJpbmcgfCBudWxsfT4oXG4gIGF4aXM6IFQgfCB1bmRlZmluZWQsXG4gIGZpZWxkTmFtZXM6IFNldDxzdHJpbmc+XG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFheGlzPy5maWVsZD8ubmFtZSB8fCBmaWVsZE5hbWVzLmhhcyhheGlzLmZpZWxkLm5hbWUpKSB7XG4gICAgcmV0dXJuIGF4aXM7XG4gIH1cbiAgcmV0dXJuIHsuLi5heGlzLCBmaWVsZDogbnVsbCwgdGl0bGU6IG51bGx9O1xufVxuXG5mdW5jdGlvbiBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKFxuICBjaGFydDogQ2hhcnRDb25maWcsXG4gIGRhdGFzZXQ6IHtmaWVsZHM/OiB7bmFtZTogc3RyaW5nfVtdfSB8IHVuZGVmaW5lZFxuKTogQ2hhcnRDb25maWcge1xuICBjb25zdCBmaWVsZE5hbWVzID0gbmV3IFNldCgoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkpO1xuICBjb25zdCBuZXh0ID0gY2hhcnQgYXMgQ2hhcnRDb25maWcgJiB7XG4gICAgeEF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHlBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBheGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBncm91cEJ5Pzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB2YWx1ZT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gIH07XG4gIHJldHVybiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0LCB7XG4gICAgeEF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnhBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICB5QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueUF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LmF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGdyb3VwQnk6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0Lmdyb3VwQnksIGZpZWxkTmFtZXMpLFxuICAgIHZhbHVlOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC52YWx1ZSwgZmllbGROYW1lcylcbiAgfSBhcyBQYXJ0aWFsPENoYXJ0Q29uZmlnPik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHNob3VsZFJlbW92ZTogKGNoYXJ0OiBDaGFydENvbmZpZykgPT4gYm9vbGVhblxuKTogVCB7XG4gIGNvbnN0IGNoYXJ0cyA9IHN0YXRlLmNoYXJ0cyB8fCBbXTtcbiAgY29uc3QgcmVtb3ZlZCA9IGNoYXJ0cy5maWx0ZXIoc2hvdWxkUmVtb3ZlKTtcbiAgaWYgKCFyZW1vdmVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCByZW1vdmVkSWRzID0gbmV3IFNldChyZW1vdmVkLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBmaWx0ZXJJZHMgPSBuZXcgU2V0KFxuICAgIHJlbW92ZWQuZmxhdE1hcChjaGFydCA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNoYXJ0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgICAgIHJldHVybiBpZCA/IFtpZCwgYCR7aWR9LXhgLCBgJHtpZH0teWBdIDogW107XG4gICAgfSlcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBjaGFydHMuZmlsdGVyKGNoYXJ0ID0+ICFyZW1vdmVkSWRzLmhhcyhjaGFydC5pZCkpXG4gIH07XG4gIGlmIChmaWx0ZXJJZHMuc2l6ZSkge1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGUgYXMgVDtcbn1cblxuLyoqXG4gKiBBZGQgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZENoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y2hhcnR9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY2hhcnQ/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUuY2hhcnRzIHx8IFtdKS5zb21lKGV4aXN0aW5nID0+IGV4aXN0aW5nLmlkID09PSBjaGFydC5pZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChleGlzdGluZyA9PiAoe1xuICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHtcbiAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBjaGFydC5kaXNwbGF5Py5pc0NvbmZpZ0FjdGl2ZSA/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+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pLFxuICAgIGNoYXJ0ID0+IHtcbiAgICAgIGlmIChjaGFydC5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJzVG9SZW1vdmUuaW5jbHVkZXMoY2hhcnQubGF5ZXJJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMFxuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKGRhdGFzZXQpLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICBub3RpZmljYXRpb25UYXNrc1xuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgLy8gYSBsYXllciBhbHJlYWR5IGluIGEgcGFuZWwgd2FzIG1lcmdlZCBmcm9tIHNwbGl0IG1hcHMsIHdoaWNoIGRlY2lkZSB0aGUgcGFuZWxzIHNob3dpbmcgaXRcbiAgICBjb25zdCBsYXllcnNOb3RJblNwbGl0TWFwcyA9IG5ld0xheWVycy5maWx0ZXIoXG4gICAgICBsID0+ICFtZXJnZWRTdGF0ZS5zcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycylcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBsYXllcnNOb3RJblNwbGl0TWFwcylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PlxuICAgICAgdGwuZmllbGQgJiYgcmVuYW1lc1t0bC5maWVsZC5uYW1lXVxuICAgICAgICA/IHsuLi50bCwgZmllbGQ6IHsuLi50bC5maWVsZCwgbmFtZTogcmVuYW1lc1t0bC5maWVsZC5uYW1lXX19XG4gICAgICAgIDogdGxcbiAgICApO1xuICAgIGlmICh0ZXh0TGFiZWwuc29tZSgodGwsIGkpID0+IHRsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2ldKSkge1xuICAgICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gdGV4dExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmFtZSkgPiAtMSk7XG5cbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IFNldChuZXdUYWJsZS5maWVsZHMubWFwKGYgPT4gZi5uYW1lKSk7XG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuXG4gIC8vIDIuIHJlY29uY2lsZSBmaWx0ZXJzXG4gIGxldCBuZXdGaWx0ZXJzID0gc3RhdGUuZmlsdGVyc1xuICAgIC5tYXAoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IHZpID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFJZCk7XG4gICAgICBpZiAodmkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID09PSAtMSkge1xuICAgICAgICAvLyBjb2x1bW4gaXMgZ29uZTogZHJvcCBhIHNpbmdsZS1kYXRhc2V0IGZpbHRlciwgc3BsaWNlIGl0IG91dCBvZiBhIHN5bmNlZCBvbmVcbiAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sdW1uIHByZXNlbnQgKHBvc3NpYmx5IHJlbmFtZWQpOiByZS1yZXNvbHZlIG5hbWUvZmllbGRJZHgvZG9tYWluXG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGJydXNoIGZpbHRlcnMgY2FycnkgYSBzZWNvbmQgeS1heGlzIGZpZWxkOyBmb2xsb3cgYSByZW5hbWUgdGhlcmUgdG9vXG4gICAgICBjb25zdCB5QXhpcyA9XG4gICAgICAgIHVwZGF0ZWQueUF4aXM/Lm5hbWUgJiZcbiAgICAgICAgKHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXVxuICAgICAgICAgID8gey4uLnVwZGF0ZWQueUF4aXMsIG5hbWU6IHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXX1cbiAgICAgICAgICA6IG5ld0ZpZWxkc0J5TmFtZS5oYXModXBkYXRlZC55QXhpcy5uYW1lKVxuICAgICAgICAgID8gdXBkYXRlZC55QXhpc1xuICAgICAgICAgIDogbnVsbCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAgIHlBeGlzLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIHJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZFxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDMuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIChncHVGaWx0ZXIgLyBmaWx0ZXJSZWNvcmQgLyBmaWx0ZXJlZEluZGV4KVxuICBuZXdUYWJsZS5maWx0ZXJUYWJsZShcbiAgICBuZXdGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCksXG4gICAge31cbiAgKTtcblxuICAvLyA0LiByZWNvbmNpbGUgbGF5ZXJzXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllcnMgPSBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IHJlY29uY2lsZWQgPSByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEobGF5ZXIsIHJlbmFtZXMsIG5ld1RhYmxlLCBzdGF0ZSk7XG4gICAgaWYgKHJlY29uY2lsZWQpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVkO1xuICAgIH1cbiAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyLmlkKTtcbiAgICByZXR1cm4gbGF5ZXI7IC8vIHBsYWNlaG9sZGVyLCBkcm9wcGVkIHZpYSByZW1vdmVMYXllclVwZGF0ZXIgYmVsb3dcbiAgfSk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHMsXG4gICAgZmlsdGVyczogbmV3RmlsdGVycyxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIC8vIDYuIGRyb3AgbGF5ZXJzIHRoYXQgbG9zdCB0aGVpciByZXF1aXJlZCBjb2x1bW5zXG4gIG5leHRTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwgbmV4dFN0YXRlKTtcblxuICAvLyA3LiByZWNvbXB1dGUgbGF5ZXIgZG9tYWlucyArIGRhdGEgZm9yIHRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IEFycmF5LmZyb20oZmlsZXMpO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IGdldEZpbGVzVG9QYXJzZShjb21wYW5pb25GaWxlcyk7XG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWRcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKFxuICBmaWxlLFxuICBmaWxlQ2FjaGUsXG4gIGxvYWRlcnM6IExvYWRlcltdID0gW10sXG4gIGxvYWRPcHRpb25zID0ge30sXG4gIGNvbXBhbmlvbkZpbGVzPzogRmlsZVtdXG4pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zLCBjb21wYW5pb25GaWxlc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2h9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLkV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZlYXR1cmUgPSBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVyPy5jb25maWcuZGF0YUlkO1xuICBsZXQgZGF0YXNldCA9IGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiBudWxsO1xuXG4gIGlmICghbGF5ZXIgfHwgIWRhdGFzZXQgfHwgIWRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEdQVSByYW5nZS90aW1lIGZpbHRlcnMgYXJlIG5vdCByZWZsZWN0ZWQgaW4gZmlsdGVyZWRJbmRleDsgZXZhbHVhdGUgdGhlbSBvbiBDUFVcbiAgLy8gdGhlIHNhbWUgd2F5IGV4cG9ydCBkYXRhIGRvZXMsIHRoZW4gY2xpcCB0aGUgcmVzdWx0IHRvIHRoZSBkcmF3aW5nLlxuICBpZiAoIWlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyLlxuICAgIC8vIEtlZXAgdGhlIG9uZXMgb2YgYSBkYXRhc2V0IHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kIG5vdCBtZXJnZWQgYmFjayB5ZXQ6XG4gICAgLy8gaXRzIGxheWVycyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBjdXJyZW50IHNwbGl0IG1hcHMuXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChcbiAgICAgIHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsXG4gICAgICBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXVxuICAgICk7XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVGhlIG9yZGVyIHRvIHByZXNlcnZlIGZvciB0aGUgaXRlbXMgdGhhdCB3aWxsIGJlIG1lcmdlZCBiYWNrLlxuICpcbiAqIGBpZHNgIGNvbWVzIGZyb20gdGhlIHNlcmlhbGl6ZWQgc3RhdGUsIHNvIGl0IGxpc3RzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBpdGVtc1xuICogYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbzogYW4gYXBwIHJlZnJlc2hpbmcgc2V2ZXJhbFxuICogZGF0YXNldHMgaW4gYSByb3cgcHJlcGFyZXMgdGhlIHNlY29uZCByZXBsYWNlbWVudCBiZWZvcmUgdGhlIGZpcnN0IG9uZSdzXG4gKiBpdGVtcyBoYXZlIG1lcmdlZCBiYWNrLiBXcml0aW5nIGBpZHNgIGFzIGl0IGlzIHdvdWxkIGRyb3AgdGhvc2UsIGFuZFxuICogYGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXJgIHB1dHMgYW4gaXRlbSBpdCBjYW5ub3QgcGxhY2UgYXQgdGhlIGZyb250IOKAlFxuICogc28gdGhleSB3b3VsZCBjb21lIGJhY2sgcmV2ZXJzZWQuIFdoZXJlIHRoZXkgYmVsb25nIGlzIHdoYXQgdGhlIG9yZGVyIHdyaXR0ZW5cbiAqIHdoZW4gdGhleSB3ZXJlIHBhcmtlZCBhbHJlYWR5IHNheXMsIHNvIHRoYXQgb3JkZXIgaXMga2VwdCBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgcHJldmlvdXNPcmRlcjogc3RyaW5nW10gPSBbXSxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgcGFya2VkOiB7aWQ/OiBzdHJpbmd9W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFya2VkSWRzID0gcGFya2VkXG4gICAgLm1hcChpdGVtID0+IGl0ZW0/LmlkKVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmICFpZHMuaW5jbHVkZXMoaWQgYXMgc3RyaW5nKSk7XG5cbiAgaWYgKCFwYXJrZWRJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbLi4uaWRzLCAuLi5wYXJrZWRJZHNdKTtcbiAgY29uc3Qgb3JkZXJlZCA9IChwcmV2aW91c09yZGVyIHx8IFtdKS5maWx0ZXIoaWQgPT4ga25vd24uaGFzKGlkKSk7XG4gIGNvbnN0IHJlc3QgPSBbLi4uaWRzLCAuLi5wYXJrZWRJZHNdLmZpbHRlcihpZCA9PiAhb3JkZXJlZC5pbmNsdWRlcyhpZCkpO1xuXG4gIHJldHVybiBbLi4ub3JkZXJlZCwgLi4ucmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdoYXQgYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbyBhbmQgaGFzIG5vdFxuICAgICAgICAvLyBtZXJnZWQgYmFjayB5ZXQsIHJlYWQgYmVmb3JlIHRoaXMgb25lIHBhcmtzIGFueXRoaW5nIG9mIGl0cyBvd24uXG4gICAgICAgIGNvbnN0IHBhcmtlZEVsc2V3aGVyZSA9XG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRvQXJyYXkocmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXSA/PyBbXSlcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gICAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdLFxuICAgICAgICAgICAgcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpLFxuICAgICAgICAgICAgcGFya2VkRWxzZXdoZXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQVdBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQWdD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LEtBQUFxcEMsc0JBQUEsR0FDdkNGLGFBQWEsQ0FBQ0csYUFBYSxDQUFDM2tCLFdBQVcsQ0FBQyxjQUFBMGtCLHNCQUFBLGVBQXhDQSxzQkFBQSxDQUEwQ3J1QyxNQUFNLElBQ2hEZ3VDLGFBQWEsRUFDYjtRQUNBRyxhQUFhLENBQUNILGFBQWEsQ0FBQyxHQUFHWix3QkFBd0IsQ0FDckRlLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDLEVBQzVCNUIsU0FBUyxDQUFDdmtDLEdBQUcsQ0FBQyxVQUFBaTZCLElBQUk7VUFBQSxPQUFJQSxJQUFJLENBQUM1L0IsRUFBRTtRQUFBLEVBQUMsRUFDOUJxc0MsZUFDRixDQUFDO01BQ0g7SUFDRixDQUFDLENBQUM7SUFFRixPQUFPSixhQUFhO0VBQ3RCLENBQUMsRUFDRDFtQyxLQUNGLENBQUM7RUFFRCxPQUFPdUMsU0FBUztBQUNsQjtBQUVBLFNBQVN5a0MsdUJBQXVCQSxDQUM5QmhuQyxLQUFLLEVBQ0wrbUMsWUFBWSxFQUFBRSxNQUFBLEVBRVo7RUFBQSxJQURDdmpDLElBQUksR0FBQXVqQyxNQUFBLENBQUp2akMsSUFBSTtJQUFFd2UsV0FBVyxHQUFBK2tCLE1BQUEsQ0FBWC9rQixXQUFXO0lBQUVva0Isa0JBQWtCLEdBQUFXLE1BQUEsQ0FBbEJYLGtCQUFrQjtJQUFFN0IsWUFBWSxHQUFBd0MsTUFBQSxDQUFaeEMsWUFBWTtFQUVwRDtFQUNBO0VBQ0EsSUFBSWxpQyxTQUFTLEdBQUcraEMsbUJBQW1CLENBQUN0a0MsS0FBSyxFQUFFK21DLFlBQVksRUFBRTtJQUFDcmpDLElBQUksRUFBSkEsSUFBSTtJQUFFd2UsV0FBVyxFQUFYQSxXQUFXO0lBQUV1aUIsWUFBWSxFQUFaQTtFQUFZLENBQUMsQ0FBQztFQUMzRixJQUFNSixZQUFZLEdBQUcsQ0FBQWlDLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUdTLFlBQVksQ0FBQyxLQUFJNUMsbUJBQW1CLENBQUM0QyxZQUFZLENBQUM7RUFFNUYsSUFBSTFDLFlBQVksRUFBRTtJQUNoQjloQyxTQUFTLEdBQUcsSUFBQXFMLG9CQUFPLEVBQUN5MkIsWUFBWSxDQUFDLENBQUMvM0IsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTI2QixXQUFXLEVBQUs7TUFDOUQ7TUFDQTtNQUNBLE9BQU9wQyxxQkFBcUIsQ0FBQ3Y0QixJQUFJLEVBQUUyNkIsV0FBVyxFQUFFQSxXQUFXLENBQUM7SUFDOUQsQ0FBQyxFQUFFM2tDLFNBQVMsQ0FBQztFQUNmO0VBQ0EsT0FBT0EsU0FBUztBQUNsQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
5946
|
+
var DATASET_OP_ADD_OPTIONS = {
|
|
5947
|
+
autoCreateLayers: true,
|
|
5948
|
+
centerMap: false,
|
|
5949
|
+
keepExistingConfig: true
|
|
5950
|
+
};
|
|
5951
|
+
function applyDerivedProtoDataset(state, proto) {
|
|
5952
|
+
var resultId = proto.info.id;
|
|
5953
|
+
if (!resultId) {
|
|
5954
|
+
return state;
|
|
5955
|
+
}
|
|
5956
|
+
if (state.datasets[resultId]) {
|
|
5957
|
+
var nextState = updateDatasetUpdater(state, {
|
|
5958
|
+
dataId: resultId,
|
|
5959
|
+
data: proto.data
|
|
5960
|
+
});
|
|
5961
|
+
var existing = nextState.datasets[resultId];
|
|
5962
|
+
if (!existing) {
|
|
5963
|
+
return nextState;
|
|
5964
|
+
}
|
|
5965
|
+
existing.metadata = _objectSpread(_objectSpread({}, existing.metadata), proto.metadata);
|
|
5966
|
+
existing.label = proto.info.label || existing.label;
|
|
5967
|
+
return nextState;
|
|
5968
|
+
}
|
|
5969
|
+
return updateVisDataUpdater(state, {
|
|
5970
|
+
datasets: proto,
|
|
5971
|
+
options: DATASET_OP_ADD_OPTIONS
|
|
5972
|
+
});
|
|
5973
|
+
}
|
|
5974
|
+
function runGroupByUpdater(state, action) {
|
|
5975
|
+
var _executeGroupBy = (0, _datasetOpsUpdaters.executeGroupBy)(state, action),
|
|
5976
|
+
nextState = _executeGroupBy.state,
|
|
5977
|
+
proto = _executeGroupBy.proto;
|
|
5978
|
+
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
5979
|
+
}
|
|
5980
|
+
function runJoinUpdater(state, action) {
|
|
5981
|
+
var _executeJoin = (0, _datasetOpsUpdaters.executeJoin)(state, action),
|
|
5982
|
+
nextState = _executeJoin.state,
|
|
5983
|
+
proto = _executeJoin.proto;
|
|
5984
|
+
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
5985
|
+
}
|
|
5986
|
+
function runSpatialJoinUpdater(state, action) {
|
|
5987
|
+
var _executeSpatialJoin = (0, _datasetOpsUpdaters.executeSpatialJoin)(state, action),
|
|
5988
|
+
nextState = _executeSpatialJoin.state,
|
|
5989
|
+
proto = _executeSpatialJoin.proto;
|
|
5990
|
+
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
5991
|
+
}
|
|
5992
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZGF0YXNldE9wc1VwZGF0ZXJzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJsZWdlbmQiLCJoaWRlSW52aXNpYmxlTGF5ZXJzIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImxpbWl0U2VhcmNoIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsImFubm90YXRpb24iLCJ6b29tT3BhY2l0eSIsImNvbnRyb2xsZXJzIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImdyb3VwQnlzIiwiam9pbnMiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJjaGFydHMiLCJjaGFydHNUb0JlTWVyZ2VkIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJzdGFnZWRUb0FkZCIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdQcm9jZXNzaW5nIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMiLCJmaXRCb3VuZHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXIiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwid2l0aFRhc2siLCJmaXRNYXBCb3VuZHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJyZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQiLCJ2aXN1YWxDaGFubmVsIiwiaW5jb21pbmciLCJfdHlwZW9mMiIsImZvdW5kIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiU0NBTEVfVFlQRVMiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiY2hhbm5lbEtleSIsImplbmtzIiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsInByZXZpb3VzV2luZG93IiwibmV4dEZpbHRlciIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdGVkIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImV2ZXJ5IiwidiIsImlzRmluaXRlIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm5ld0ZpbHRlciIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwic3RlcCIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJkYXRhc2V0SWRzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbCIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwieG9yIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGVVcGRhdGUiLCJwbG90VHlwZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJncm91cEJ5IiwibWVyZ2VQbG90R3JvdXBCeSIsInBpY2tfIiwibWVyZ2VfIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImxheWVyVG9SZW1vdmUiLCJyZW1vdmVMYXllckZyb21ab29tT3BhY2l0eSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJzaG91bGRSZW1vdmUiLCJyZW1vdmVkIiwicmVtb3ZlZElkcyIsImZpbHRlcklkcyIsImZsYXRNYXAiLCJfY2hhcnQkY3Jvc3NGaWx0ZXIiLCJjcm9zc0ZpbHRlciIsInJlZHVjZVJpZ2h0IiwiYWRkQ2hhcnRVcGRhdGVyIiwiX3JlZjEzIiwiX2NoYXJ0JGRpc3BsYXkkaXNDb25mIiwiX2NoYXJ0JGRpc3BsYXkiLCJleGlzdGluZyIsImlzSnNvbkVkaXRvckFjdGl2ZSIsInVwZGF0ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNCIsIl9uZXh0JGNyb3NzRmlsdGVyMiIsIl9wcmV2JGNyb3NzRmlsdGVyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIyIiwiX25leHQkY3Jvc3NGaWx0ZXIzIiwiZGF0YUlkQ2hhbmdlZCIsImxheWVySWRDaGFuZ2VkIiwiX25leHQkY3Jvc3NGaWx0ZXIiLCJvd25lZEZpbHRlcklkcyIsInJlbW92ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNSIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjE2IiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxNyIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJwcm92aWRlZEFuZ2xlIiwiYW5nbGUiLCJkZXJpdmVkRnJvbUFuZ2xlIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsInRleHRTaWRlIiwiQW5ub3RhdGlvbktpbmQiLCJURVhUIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTkiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjAiLCJjbG9uZURlZXAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIxIiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsInJlbW92ZU9wc0ZvckRhdGFzZXRzIiwicmVtb3ZlU2luZ2xlRGF0YXNldFVwZGF0ZXIiLCJfc3RhdGUkZGF0YXNldHMiLCJfZGF0YXNldCIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwiaXNWYWxpZE1lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRGF0YXNldFR5cGUiLCJFWFRFUk5BTExZX0hPU1RFRCIsIm1ldGFkYXRhIiwic291cmNlIiwiaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfeCIsIl9oeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyNyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJzZXRMb2FkaW5nUHJvZ3Jlc3MiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwicGhhc2UiLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsImNsZWFyTG9hZGluZ1Byb2dyZXNzIiwiaWRzIiwiY3VycmVudCIsInByb2Nlc3NpbmciLCJuZXh0UHJvY2Vzc2luZyIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyOCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjI5IiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudDIiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwiYmltYXAiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMzAiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidXBkYXRlZERhdGFzZXRzIiwibmV4dEZpbHRlcnMiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX3JlZjMxIiwiX3Jlc3VsdCRkYXRhIiwibWV0YWRhdGFQYXRjaCIsInNjaGVtYVVuY2hhbmdlZCIsIm5vdE1vZGlmaWVkIiwidXBkYXRlIiwicmVmcmVzaGVkIiwicmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEiLCJpc0RhdGFzZXRSb3dMaXN0IiwiaXNQbGFpbk9iamVjdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMyIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzMiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzQiLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsInJlYWR5VGFza3MiLCJyZW1vdGVUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM1IiwiZGF0YXNldEluZGV4IiwiX3JlZjM1JGluZm8iLCJyZXN0IiwicHJvdG8iLCJyZW1vdGUiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsInByb2dyZXNzSWRzIiwiYmF0Y2hlcyIsInRhc2tzIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImJhdGNoIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNiIsIl9yZWYzNyIsImNrZXkiLCJjb2wiLCJfcmVmMzgiLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibmV4dEZpbGVMb2FkSWQiLCJjcmVhdGVGaWxlTG9hZElkIiwibG9hZElkIiwiZmluaXNoRmlsZUxvYWQiLCJvbkZpbmlzaCIsImZpbGVDYWNoZSIsImxvYWRGaWxlc1VwZGF0ZXIiLCJfc3RhdGUkZmlsZUxvYWRpbmckb3AiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiY29tcGFuaW9uRmlsZXMiLCJmaWxlc1RvTG9hZCIsImdldEZpbGVzVG9QYXJzZSIsImRlZmVyQWRkVG9NYXAiLCJhcHBlbmREZWZlcnJlZEZpbGVMb2FkIiwicHJldmlvdXNFcnJvcnMiLCJmcm9tRW50cmllcyIsIl9yZWYzOSIsIl9yZWY0MCIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZE5leHRGaWxlVXBkYXRlciIsIl9yZWY0MSIsImxvYWRpbmciLCJmaWxlIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJjdXJyZW50TG9hZElkIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkyIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJpc1ppcEZpbGVOYW1lIiwiRVhQQU5EX1pJUF9UQVNLIiwiZXh0ZW5zaW9ucyIsImRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMiLCJleHBhbnNpb24iLCJleHBhbmRaaXBBcmNoaXZlU3VjY2VzcyIsImFyY2hpdmVOYW1lIiwibG9hZEZpbGVzRXJyIiwibWFrZUxvYWRGaWxlVGFzayIsInNlZW4iLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibG9hZGVyIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImV4dGVuc2lvbiIsImV4dCIsInJlcGxhY2UiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJhZGQiLCJjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUiLCJleHRyYWN0ZWQiLCJzaGFwZWZpbGUiLCJjb21wYW5pb25zIiwid2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeSIsImV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlciIsImFkZERhdGFPcHRpb25zIiwiZGlzcGxheU5hbWUiLCJMT0FEX0ZJTEVfVEFTSyIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmNDIiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWY0MiRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjQzIiwiY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQ0IiwiZXJyb3JMb2FkSWQiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDUiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQ3IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ4Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ5IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0OSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjUwIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY1MSIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY1MiIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MyIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1NCIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTUiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjU2IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjU3IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjU4IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwiX3JlZjU5IiwibG9hZENvbHVtblN0YXRzU3VjY2VzcyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yIiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNjAiLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjYxIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJwcm9jZXNzR2VvanNvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImNsZWFyZWRTdGF0ZSIsImxhYmVsSWQiLCJmbG9vciIsInJhbmRvbSIsImV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyIiwiX3JlZjYyIiwiaXNUaWxlZEV4dHJhY3QiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsImRvd25sb2FkIiwiZG93bmxvYWRDbGlwIiwicG5nIiwianNvbiIsInN1Y2Nlc3NOb3RpZmljYXRpb24iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY2MyIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwiY29uc29sZSIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY2NSIsInNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmNjYiLCJfc3RhdGUkbG9hZGluZ1Byb2dyZXMiLCJfc3RhdGUkbG9hZGluZ1Byb2Nlc3MiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImxheWVyVGltZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJpc09iamVjdCIsImZpbmRDaGlsZERhdGFzZXRJZHMiLCJfdmFsdWUkbmV3RGF0YXNldCIsImNoaWxkRGF0YUlkcyIsIm1vdmVWYWx1ZVRvQmVNZXJnZWQiLCJwcm9wVmFsdWVzIiwiX3JlZjY4Iiwic2F2ZVVubWVyZ2VkIiwic3RhdGVSZW1vdmVkIiwicHJvcFZhbHVlIiwicCIsInRvQmVNZXJnZWQiLCJyZXBsYWNlRGF0YXNldEFuZERlcHMiLCJkYXRhSWRUb1VzZSIsImRlbGV0ZU9yaWdpbmFsRGF0YXNldCIsImNvbXBvc2VfIiwiYXBwbHlfIiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsImlmXyIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwicHJlc2VydmVkT3JkZXJXaXRoUGFya2VkIiwicHJldmlvdXNPcmRlciIsInBhcmtlZCIsInBhcmtlZElkcyIsImtub3duIiwib3JkZXJlZCIsIl9yZWY2OSIsImFjY3VTdGF0ZSIsIl9yZWY3MCIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyMiIsIm1lcmdlck9wdGlvbnMiLCJwYXJrZWRFbHNld2hlcmUiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY3MSIsImNoaWxkRGF0YUlkIiwiREFUQVNFVF9PUF9BRERfT1BUSU9OUyIsImFwcGx5RGVyaXZlZFByb3RvRGF0YXNldCIsInJlc3VsdElkIiwicnVuR3JvdXBCeVVwZGF0ZXIiLCJfZXhlY3V0ZUdyb3VwQnkiLCJleGVjdXRlR3JvdXBCeSIsInJ1bkpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVKb2luIiwiZXhlY3V0ZUpvaW4iLCJydW5TcGF0aWFsSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZVNwYXRpYWxKb2luIiwiZXhlY3V0ZVNwYXRpYWxKb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIEVYUEFORF9aSVBfVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyxcbiAgc2V0TG9hZGluZ1Byb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgc3VjY2Vzc05vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcixcbiAgaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgaWZfLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7XG4gIGdldEZpbGVzVG9QYXJzZSxcbiAgaXNaaXBGaWxlTmFtZSxcbiAgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgWmlwQXJjaGl2ZUV4cGFuc2lvblxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93LCByZW1vdmVMYXllckZyb21ab29tT3BhY2l0eX0gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIGV4ZWN1dGVHcm91cEJ5LFxuICBleGVjdXRlSm9pbixcbiAgZXhlY3V0ZVNwYXRpYWxKb2luLFxuICByZW1vdmVEYXRhc2V0T3BVcGRhdGVyLFxuICByZW1vdmVPcHNGb3JEYXRhc2V0cyxcbiAgc2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIsXG4gIHNldEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTcGF0aWFsSm9pbkNvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi9kYXRhc2V0LW9wcy11cGRhdGVycyc7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgbWVyZ2VQbG90R3JvdXBCeSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBsZWdlbmQ6IHtcbiAgICBpZDogJ2xlZ2VuZCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMubGVnZW5kJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGhpZGVJbnZpc2libGVMYXllcnM6IGZhbHNlXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAyLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGFubm90YXRpb246IHtcbiAgICBpZDogJ2Fubm90YXRpb24nLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmFubm90YXRpb24nLFxuICAgIGVuYWJsZWQ6IGZhbHNlXG4gIH0sXG4gIHpvb21PcGFjaXR5OiB7XG4gICAgaWQ6ICd6b29tT3BhY2l0eScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZmFkZU9uWm9vbScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBjb250cm9sbGVyczogW11cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgZ3JvdXBCeXM6IFtdLFxuICBqb2luczogW10sXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBzdGFnZWRUb0FkZDogbnVsbCxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuICBsb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBsb2FkaW5nUHJvY2Vzc2luZzoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICAvLyBTYXZlZCBjb25maWdzIGhhdmUgYSB2aXN1YWxDaGFubmVscyBzaWJsaW5nOyBwYXJzZWQvZWRpdG9yIEpTT04gZm9sZHMgdGhvc2VcbiAgLy8gZmllbGRzIGludG8gY29uZmlnLiBSZS1wYXJzaW5nIHRoZSBsYXR0ZXIgZHJvcHMgY29sb3JGaWVsZCBhbmQgcmVzZXRzIHRoZSBzY2FsZS5cbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZylcbiAgICA6IG5ld0xheWVyQ29uZmlnO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBGaXQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciB0eXBlIGRyb3Bkb3duIGdpdmVzIGFuIGVtcHR5IGxheWVyIGl0cyBmaXJzdFxuICogdHlwZSBhbmQgdGhhdCBsYXllciBhbHJlYWR5IHBvaW50cyBhdCBhIGRhdGFzZXQuIExhdGVyIHR5cGUgY2hhbmdlcyxcbiAqIHByb2dyYW1tYXRpYyBgbGF5ZXJUeXBlQ2hhbmdlYCwgYW5kIHNhdmVkLWNvbmZpZyBhcHBsaWVzIGxlYXZlIHRoZSBjYW1lcmFcbiAqIGFsb25lLiBHYXRlZCBieSBgZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllcmAuXG4gKi9cbmZ1bmN0aW9uIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBsYXllcjogTGF5ZXIsXG4gIGZpdEJvdW5kcz86IGJvb2xlYW5cbik6IFZpc1N0YXRlIHtcbiAgaWYgKFxuICAgICFmaXRCb3VuZHMgfHxcbiAgICBvbGRMYXllci50eXBlIHx8XG4gICAgIWxheWVyLmNvbmZpZy5kYXRhSWQgfHxcbiAgICAhZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKFtsYXllcl0pO1xuICBpZiAoIWJvdW5kcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGUsXG4gICAgQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiBmaXRNYXBCb3VuZHMoYm91bmRzKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyhuZXdTdGF0ZSwgb2xkTGF5ZXIsIGxheWVyLCBhY3Rpb24uZml0Qm91bmRzKTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICAvLyBKZW5rcyBicmVha3MgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgY29sb3JzLiBSZWNhbGN1bGF0ZSB0aGUgZG9tYWluIHdoZW5cbiAgLy8gdGhlIGNvbG9yIHJhbmdlIG9mIGEgSmVua3MgY2hhbm5lbCBjaGFuZ2VzLlxuICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgICBpZiAoZGF0YXNldCkge1xuICAgICAgT2JqZWN0LmtleXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbEtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBuZXdMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYW5uZWw/LnNjYWxlICYmXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnW2NoYW5uZWwuc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5qZW5rcyAmJlxuICAgICAgICAgIGNoYW5uZWwucmFuZ2UgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLm5ld1Zpc0NvbmZpZywgY2hhbm5lbC5yYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWxLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNXaW5kb3cgPSAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuYW5pbWF0aW9uV2luZG93O1xuICBsZXQgbmV4dEZpbHRlciA9IHsuLi5maWx0ZXIsIGFuaW1hdGlvbldpbmRvd30gYXMgRmlsdGVyO1xuXG4gIC8vIEVudGVyaW5nIG9yIGxlYXZpbmcgaW50ZXJ2YWwgcGxheWJhY2sgc25hcHMgdGhlIHdpbmRvdyBvbnRvIGhpc3RvZ3JhbSBiaW5zLlxuICBpZiAoXG4gICAgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiZcbiAgICAocHJldmlvdXNXaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwgfHwgYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKVxuICApIHtcbiAgICBjb25zdCBhZGp1c3RlZCA9IGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZGp1c3RlZC52YWx1ZSkgJiYgYWRqdXN0ZWQudmFsdWUuZXZlcnkodiA9PiBOdW1iZXIuaXNGaW5pdGUodikpKSB7XG4gICAgICBuZXh0RmlsdGVyID0gYWRqdXN0ZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXh0RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXh0RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBsZXQgcGxvdFR5cGVVcGRhdGUgPSBuZXdQcm9wLnBsb3RUeXBlO1xuICAgICAgaWYgKHBsb3RUeXBlVXBkYXRlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwbG90VHlwZVVwZGF0ZSwgJ2dyb3VwQnknKSkge1xuICAgICAgICBwbG90VHlwZVVwZGF0ZSA9IHtcbiAgICAgICAgICAuLi5wbG90VHlwZVVwZGF0ZSxcbiAgICAgICAgICBncm91cEJ5OiBtZXJnZVBsb3RHcm91cEJ5KG5ld0ZpbHRlci5wbG90VHlwZT8uZ3JvdXBCeSwgcGxvdFR5cGVVcGRhdGUuZ3JvdXBCeSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhwbG90VHlwZVVwZGF0ZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/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/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFKTtcbiAgY29uc3QgdGV4dFZlcnRpY2FsUG9zaXRpb24gPVxuICAgIGNvbmZpZz8udGV4dFZlcnRpY2FsUG9zaXRpb24gPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy52ZXJ0aWNhbCA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04pO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgLi4uKHRleHRTaWRlID8ge3RleHRTaWRlfSA6IHt9KSxcbiAgICAuLi4odGV4dFZlcnRpY2FsUG9zaXRpb24gPyB7dGV4dFZlcnRpY2FsUG9zaXRpb259IDoge30pLFxuICAgIG1hcEluZGV4OiBjb25maWc/Lm1hcEluZGV4XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEFuZ2xlID1cbiAgICB0ZXh0U2lkZSAmJiB0ZXh0VmVydGljYWxQb3NpdGlvblxuICAgICAgPyBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVFtgJHt0ZXh0U2lkZX0tJHt0ZXh0VmVydGljYWxQb3NpdGlvbn1gXVxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEU7XG5cbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5QT0lOVDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlBPSU5ULFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5BUlJPVzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkFSUk9XLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5DSVJDTEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5DSVJDTEUsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIERlcml2ZWQgdGFibGVzIGFyZSBzbmFwc2hvdHM6IGtlZXAgdGhlbSB3aGVuIGEgc291cmNlIGRhdGFzZXQgaXMgZGVsZXRlZC5cbiAgLy8gT25seSBkcm9wIGluLXByb2dyZXNzIGdyb3VwLWJ5IC8gam9pbiBkcmFmdHMgdGhhdCByZWZlcmVuY2VkIHRoaXMgZGF0YXNldC5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGUsIFtkYXRhc2V0S2V5XSkgYXMgVDtcbiAgcmV0dXJuIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyKG5leHRTdGF0ZSwgZGF0YXNldEtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFQsIGRhdGFzZXRLZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBfZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/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+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xubGV0IG5leHRGaWxlTG9hZElkID0gMTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsZUxvYWRJZCgpOiBudW1iZXIge1xuICBjb25zdCBsb2FkSWQgPSBuZXh0RmlsZUxvYWRJZDtcbiAgbmV4dEZpbGVMb2FkSWQgKz0gMTtcbiAgcmV0dXJuIGxvYWRJZDtcbn1cblxuZnVuY3Rpb24gZmluaXNoRmlsZUxvYWQoXG4gIG9uRmluaXNoOiAocGF5bG9hZDogYW55LCBvcHRpb25zPzogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMpID0+IGFueSxcbiAgZmlsZUNhY2hlOiBhbnlbXSxcbiAgb3B0aW9uczogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGxvYWRJZDogbnVtYmVyXG4pIHtcbiAgY29uc3QgYWN0aW9uID0gb3B0aW9ucyA/IG9uRmluaXNoKGZpbGVDYWNoZSwgb3B0aW9ucykgOiBvbkZpbmlzaChmaWxlQ2FjaGUpO1xuICByZXR1cm4gey4uLmFjdGlvbiwgbG9hZElkfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzcywgb3B0aW9uc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuXG4gIC8vIEFub3RoZXIgZHJvcCB3aGlsZSBhIGRlZmVycmVkIHBhcnNlIGlzIHJ1bm5pbmcgbXVzdCBqb2luIHRoYXQgbG9hZC5cbiAgLy8gUmVwbGFjaW5nIGBmaWxlTG9hZGluZ2AgbWFrZXMgdGhlIGluLWZsaWdodCBmaWxlIGZpbmlzaCBhZ2FpbnN0IHRoZSBuZXdcbiAgLy8gY2FjaGUgYW5kIGRyb3AgdGhlIGZpbGVzIHRoYXQgd2VyZSBhbHJlYWR5IGJlaW5nIHBhcnNlZC5cbiAgaWYgKHN0YXRlLmZpbGVMb2FkaW5nICYmIHN0YXRlLmZpbGVMb2FkaW5nLm9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgb3B0aW9ucz8uZGVmZXJBZGRUb01hcCkge1xuICAgIHJldHVybiBhcHBlbmREZWZlcnJlZEZpbGVMb2FkKHN0YXRlLCB7ZmlsZXNUb0xvYWQsIGNvbXBhbmlvbkZpbGVzfSk7XG4gIH1cblxuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEEgZGVmZXJyZWQgbG9hZCBpcyBhbm90aGVyIGJhdGNoIGZvciB0aGUgc2FtZSBBZGQgRGF0YSBjbGljay4gS2VlcCBmaWxlc1xuICAvLyBhbHJlYWR5IHN0YWdlZCwgYW5kIGtlZXAgdGhlaXIgZXJyb3IgY2FyZHMsIGluc3RlYWQgb2Ygc3RhcnRpbmcgb3Zlci5cbiAgY29uc3QgcHJldmlvdXNFcnJvcnMgPVxuICAgIG9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlPy5lcnJvcilcbiAgICAgICAgKVxuICAgICAgOiB7fTtcblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHByZXZpb3VzRXJyb3JzXG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgbG9hZElkOiBjcmVhdGVGaWxlTG9hZElkKCksXG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICBvbkZpbmlzaCxcbiAgICAuLi4ob3B0aW9ucyA/IHtvcHRpb25zfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7XG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZyxcbiAgICAuLi4ob3B0aW9ucz8uZGVmZXJBZGRUb01hcCA/IHt9IDoge3N0YWdlZFRvQWRkOiBudWxsfSlcbiAgfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIGRyb3AgdG8gdGhlIGRlZmVycmVkIGxvYWQgdGhhdCBpcyBhbHJlYWR5IHBhcnNpbmcuXG4gKiBUaGUgY3VycmVudCBmaWxlIGtlZXBzIGl0cyBjYWNoZTsgdGhlIG5ldyBmaWxlcyBydW4gYWZ0ZXIgaXQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZERlZmVycmVkRmlsZUxvYWQoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzXG4gIH06IHtcbiAgICBmaWxlc1RvTG9hZDogRmlsZVtdO1xuICAgIGNvbXBhbmlvbkZpbGVzOiBGaWxlW107XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWxvYWRpbmcgfHwgKCFmaWxlc1RvTG9hZC5sZW5ndGggJiYgIWNvbXBhbmlvbkZpbGVzLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmaWxlLCBpbmRleCkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSkoYWNjdSksXG4gICAgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkOiBbLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKSwgLi4uZmlsZXNUb0xvYWRdLFxuICAgICAgY29tcGFuaW9uRmlsZXM6IFsuLi4obG9hZGluZy5jb21wYW5pb25GaWxlcyB8fCBbXSksIC4uLmNvbXBhbmlvbkZpbGVzXVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3QgbG9hZElkID0gc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIC8vIERlY2lkZSBhZnRlciB0aGUgcGF1c2UsIGFuZCBvbmx5IGZvciB0aGlzIGxvYWQuIEEgZHJvcCBkdXJpbmcgdGhlc2VcbiAgLy8gMjAwbXMgam9pbnMgdGhlIHF1ZXVlOyBjYW5jZWwgb3IgYSBuZXdlciBsb2FkIG1ha2VzIHRoaXMgY29udGludWF0aW9uIHN0YWxlLlxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlLCBhY3Rpb24/OiB7bG9hZElkPzogbnVtYmVyfSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZElkID0gYWN0aW9uPy5sb2FkSWQ7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGxvYWRJZCAhPSBudWxsICYmIHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gbG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGxvYWRJZDogY3VycmVudExvYWRJZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+IGZpbmlzaEZpbGVMb2FkKG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGN1cnJlbnRMb2FkSWQpKVxuICAgICk7XG4gIH1cbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICBpZiAoaXNaaXBGaWxlTmFtZShmaWxlLm5hbWUpKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgICBFWFBBTkRfWklQX1RBU0soe2ZpbGUsIGV4dGVuc2lvbnM6IGRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMobG9hZGVycyl9KS5iaW1hcChcbiAgICAgICAgZXhwYW5zaW9uID0+XG4gICAgICAgICAgZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3Moe1xuICAgICAgICAgICAgbG9hZElkOiBjdXJyZW50TG9hZElkLFxuICAgICAgICAgICAgYXJjaGl2ZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIGV4cGFuc2lvblxuICAgICAgICAgIH0pLFxuICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyLCBjdXJyZW50TG9hZElkKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWQsXG4gICAgICBvcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzKFxuICBsb2FkZXJzOiBBcnJheTx7ZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdfT4gPSBbXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBsb2FkZXI/LmV4dGVuc2lvbnMgfHwgW10pIHtcbiAgICAgIGNvbnN0IGV4dCA9IFN0cmluZyhleHRlbnNpb24pLnJlcGxhY2UoL15cXC4vLCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIWV4dCB8fCBleHQgPT09ICd6aXAnIHx8IHNlZW4uaGFzKGV4dCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChleHQpO1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKGV4dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBleHRlbnNpb25zO1xufVxuXG5mdW5jdGlvbiBjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUoZXhwYW5zaW9uOiBaaXBBcmNoaXZlRXhwYW5zaW9uLCBleGlzdGluZz86IEZpbGVbXSk6IEZpbGVbXSB7XG4gIGNvbnN0IGV4dHJhY3RlZCA9XG4gICAgZXhwYW5zaW9uLmtpbmQgPT09ICdzaGFwZWZpbGUnXG4gICAgICA/IFtleHBhbnNpb24uc2hhcGVmaWxlLCAuLi5leHBhbnNpb24uY29tcGFuaW9uc11cbiAgICAgIDogWy4uLmV4cGFuc2lvbi5kYXRhc2V0cywgLi4uZXhwYW5zaW9uLmNvbXBhbmlvbnNdO1xuICByZXR1cm4gWy4uLmV4dHJhY3RlZCwgLi4uKGV4aXN0aW5nIHx8IFtdKV07XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkoXG4gIHByb2dyZXNzOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddLFxuICBmaWxlTmFtZTogc3RyaW5nXG4pOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddIHtcbiAgaWYgKCFwcm9ncmVzcyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb2dyZXNzLCBmaWxlTmFtZSkpIHtcbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5wcm9ncmVzc307XG4gIGRlbGV0ZSBuZXh0W2ZpbGVOYW1lXTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogQXBwbHkgYW4gdW5wYWNrZWQgemlwLiBPbmUgc2hhcGVmaWxlIGtlZXBzIHRoZSBhcmNoaXZlIG5hbWUuIEFueSBvdGhlclxuICogbWl4IGlzIHF1ZXVlZCBhcyBvbmUgZGF0YXNldCBwZXIgc3VwcG9ydGVkIG1lbWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5FeHBhbmRaaXBBcmNoaXZlU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkaW5nID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghbG9hZGluZyB8fCBsb2FkaW5nLmxvYWRJZCAhPT0gYWN0aW9uLmxvYWRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7YXJjaGl2ZU5hbWUsIGV4cGFuc2lvbn0gPSBhY3Rpb247XG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlKGV4cGFuc2lvbiwgbG9hZGluZy5jb21wYW5pb25GaWxlcyk7XG5cbiAgaWYgKGV4cGFuc2lvbi5raW5kID09PSAnc2hhcGVmaWxlJykge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7Y29tcGFuaW9uRmlsZXN9KSkoc3RhdGUpO1xuICAgIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBuZXh0U3RhdGUsXG4gICAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgICBleHBhbnNpb24uc2hhcGVmaWxlLFxuICAgICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgICAgbG9hZGVycyxcbiAgICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgICAgICBsb2FkaW5nLm9wdGlvbnMsXG4gICAgICAgIGFyY2hpdmVOYW1lXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0gZXhwYW5zaW9uLmRhdGFzZXRzO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IFsuLi5kYXRhc2V0cywgLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKV07XG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBkYXRhc2V0cy5yZWR1Y2UoXG4gICAgKGFjY3UsIGZpbGUsIGluZGV4KSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpKShhY2N1KSxcbiAgICB3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5KHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGFyY2hpdmVOYW1lKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkLFxuICAgICAgY29tcGFuaW9uRmlsZXNcbiAgICB9XG4gIH07XG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSwge2xvYWRJZDogYWN0aW9uLmxvYWRJZH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXSxcbiAgYWRkRGF0YU9wdGlvbnM/OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucyxcbiAgZmlsZU5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBkaXNwbGF5TmFtZSA9IGZpbGVOYW1lIHx8IGZpbGUubmFtZTtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtcbiAgICBmaWxlLFxuICAgIGZpbGVDYWNoZSxcbiAgICBsb2FkZXJzLFxuICAgIGxvYWRPcHRpb25zLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIC4uLihmaWxlTmFtZSA/IHtmaWxlTmFtZX0gOiB7fSlcbiAgfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pLFxuICAgICAgICAuLi4oYWRkRGF0YU9wdGlvbnMgPyB7b3B0aW9uczogYWRkRGF0YU9wdGlvbnN9IDoge30pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihkaXNwbGF5TmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2gsIG9wdGlvbnN9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICBjb25zdCBkZWZlckFkZFRvTWFwID0gQm9vbGVhbihvcHRpb25zPy5kZWZlckFkZFRvTWFwKTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgICFkZWZlckFkZFRvTWFwICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiAob3B0aW9ucyA/IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0LCBvcHRpb25zKSA6IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2gsXG4gICAgICAgICAgICAgIC4uLihvcHRpb25zID8ge29wdGlvbnN9IDoge30pXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8qKlxuICogRHJvcCBmaWxlcyB3YWl0aW5nIG9uIHRoZSBBZGQgRGF0YSBidXR0b24gYW5kIGFib3J0IGFuIGluLXByb2dyZXNzIG1vZGFsIGxvYWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIHN0YWdlZFRvQWRkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZSwgbG9hZElkOiBlcnJvckxvYWRJZH06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGVycm9yTG9hZElkICE9IG51bGwgJiYgc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkICE9PSBlcnJvckxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBjb25zdCBsb2FkSWQgPSBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQ7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBTYW1lIHBhdXNlIGFzIGEgc3VjY2Vzc2Z1bCBmaWxlLiBSZS1jaGVjayB0aGlzIGxvYWQncyBxdWV1ZSB3aGVuIGl0IGVuZHMuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC4gUmFzdGVyIHRpbGVzIGRvd25sb2FkIGEgUE5HIGNsaXAgYW5kIGFcbiAqIEdlb0pTT04gc2lkZWNhciAoYmJveCByZWN0YW5nbGUgKyBzdGF0cykgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpc1RpbGVkRXh0cmFjdCA9IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikgfHwgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyKGxheWVyKTtcblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1RpbGVkRXh0cmFjdCkge1xuICAgIHN0YXRlID0gZmlsdGVyRGF0YXNldENQVShzdGF0ZSwgZGF0YUlkKTtcbiAgICBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkO1xuICB0cnkge1xuICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSh7bGF5ZXIsIGRhdGFzZXQsIGZlYXR1cmV9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQucm93Q291bnQpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHJhc3RlciBwaXhlbHMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHZlY3RvciB0aWxlIGZlYXR1cmVzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiAnTm8gcm93cyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlLWVtcHR5J1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gZmVhdHVyZTtcbiAgICBjb25zdCBkb3dubG9hZCA9XG4gICAgICB0eXBlb2YgKGxheWVyIGFzIGFueSkuZG93bmxvYWRDbGlwID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcChwb2x5Z29uKSlcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe3BuZzogZmFsc2UsIGpzb246IGZhbHNlfSk7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBVTldSQVBfVEFTSyhkb3dubG9hZCkuYmltYXAoXG4gICAgICAgIChyZXN1bHQ6IHtwbmc/OiBib29sZWFufSB8IG51bGwpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgcmVzdWx0Py5wbmdcbiAgICAgICAgICAgICAgPyBzdWNjZXNzTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdEb3dubG9hZGVkIHJhc3RlciBjbGlwIGltYWdlIGFuZCBzdGF0cyBmaWxlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdGYWlsZWQgdG8gZG93bmxvYWQgcmFzdGVyIGNsaXAgaW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgZXJyID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwOiAke1xuICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICBjb25zdCBuZXh0VmFsdWUgPSBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihuZXh0VmFsdWUgPT09IDAgJiZcbiAgICAoT2JqZWN0LmtleXMoc3RhdGUubG9hZGluZ1Byb2dyZXNzIHx8IHt9KS5sZW5ndGggfHxcbiAgICAgIE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9KS5sZW5ndGgpXG4gICAgICA/IHtsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319XG4gICAgICA6IHt9KVxuICB9O1xufTtcblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCBoeWRyYXRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwZXJjZW50LCBwaGFzZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBjb25zdCBwcm9jZXNzaW5nID0gcGhhc2UgPT09ICdwcm9jZXNzaW5nJztcbiAgaWYgKFxuICAgIHN0YXRlLmxvYWRpbmdQcm9ncmVzcz8uW2lkXSA9PT0gbmV4dFBlcmNlbnQgJiZcbiAgICBCb29sZWFuKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nPy5baWRdKSA9PT0gcHJvY2Vzc2luZ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgIFtpZF06IG5leHRQZXJjZW50XG4gICAgfSxcbiAgICAuLi4ocHJvY2Vzc2luZ1xuICAgICAgPyB7XG4gICAgICAgICAgbG9hZGluZ1Byb2Nlc3Npbmc6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nLFxuICAgICAgICAgICAgW2lkXTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB7fSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZyxcbiAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldD86IGJvb2xlYW59ID0ge31cbik6IFQge1xuICAvLyBUaGUgc2FtZSBpZCBtZWFucyB0aGUgbmV3IHRhYmxlIG9jY3VwaWVzIHRoZSBvbGQgc2xvdCwgc28gdGhlIHByZXZpb3VzIHJvd3MgaGF2ZSB0byBnby5cbiAgY29uc3QgZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gb3B0aW9ucy5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlIHx8IGRhdGFJZCA9PT0gZGF0YUlkVG9Vc2U7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgaWZfKGRlbGV0ZU9yaWdpbmFsRGF0YXNldCwgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSkpXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZyxcbiAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldD86IGJvb2xlYW59ID0ge31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gb3B0aW9ucy5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlIHx8IGRhdGFJZCA9PT0gZGF0YUlkVG9Vc2U7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSwge2RlbGV0ZU9yaWdpbmFsRGF0YXNldH0pO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBXaGVuIHRoZSBvcmlnaW5hbCB0YWJsZSBzdGF5cywgdGhlIHJlcGxhY2VtZW50IHRha2VzIGl0cyBwbGFjZSBhbmQgdGhlIG9yaWdpbmFsIGZvbGxvd3MgaXQuXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5mbGF0TWFwKGQgPT4ge1xuICAgIGlmIChkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBbZF07XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVPcmlnaW5hbERhdGFzZXQgPyBbZGF0YUlkVG9Vc2VdIDogW2RhdGFJZFRvVXNlLCBkXTtcbiAgfSk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyLlxuICAgIC8vIEtlZXAgdGhlIG9uZXMgb2YgYSBkYXRhc2V0IHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kIG5vdCBtZXJnZWQgYmFjayB5ZXQ6XG4gICAgLy8gaXRzIGxheWVycyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBjdXJyZW50IHNwbGl0IG1hcHMuXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChcbiAgICAgIHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsXG4gICAgICBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXVxuICAgICk7XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVGhlIG9yZGVyIHRvIHByZXNlcnZlIGZvciB0aGUgaXRlbXMgdGhhdCB3aWxsIGJlIG1lcmdlZCBiYWNrLlxuICpcbiAqIGBpZHNgIGNvbWVzIGZyb20gdGhlIHNlcmlhbGl6ZWQgc3RhdGUsIHNvIGl0IGxpc3RzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBpdGVtc1xuICogYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbzogYW4gYXBwIHJlZnJlc2hpbmcgc2V2ZXJhbFxuICogZGF0YXNldHMgaW4gYSByb3cgcHJlcGFyZXMgdGhlIHNlY29uZCByZXBsYWNlbWVudCBiZWZvcmUgdGhlIGZpcnN0IG9uZSdzXG4gKiBpdGVtcyBoYXZlIG1lcmdlZCBiYWNrLiBXcml0aW5nIGBpZHNgIGFzIGl0IGlzIHdvdWxkIGRyb3AgdGhvc2UsIGFuZFxuICogYGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXJgIHB1dHMgYW4gaXRlbSBpdCBjYW5ub3QgcGxhY2UgYXQgdGhlIGZyb250IOKAlFxuICogc28gdGhleSB3b3VsZCBjb21lIGJhY2sgcmV2ZXJzZWQuIFdoZXJlIHRoZXkgYmVsb25nIGlzIHdoYXQgdGhlIG9yZGVyIHdyaXR0ZW5cbiAqIHdoZW4gdGhleSB3ZXJlIHBhcmtlZCBhbHJlYWR5IHNheXMsIHNvIHRoYXQgb3JkZXIgaXMga2VwdCBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgcHJldmlvdXNPcmRlcjogc3RyaW5nW10gPSBbXSxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgcGFya2VkOiB7aWQ/OiBzdHJpbmd9W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFya2VkSWRzID0gcGFya2VkXG4gICAgLm1hcChpdGVtID0+IGl0ZW0/LmlkKVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmICFpZHMuaW5jbHVkZXMoaWQgYXMgc3RyaW5nKSk7XG5cbiAgaWYgKCFwYXJrZWRJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbLi4uaWRzLCAuLi5wYXJrZWRJZHNdKTtcbiAgY29uc3Qgb3JkZXJlZCA9IChwcmV2aW91c09yZGVyIHx8IFtdKS5maWx0ZXIoaWQgPT4ga25vd24uaGFzKGlkKSk7XG4gIGNvbnN0IHJlc3QgPSBbLi4uaWRzLCAuLi5wYXJrZWRJZHNdLmZpbHRlcihpZCA9PiAhb3JkZXJlZC5pbmNsdWRlcyhpZCkpO1xuXG4gIHJldHVybiBbLi4ub3JkZXJlZCwgLi4ucmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdoYXQgYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbyBhbmQgaGFzIG5vdFxuICAgICAgICAvLyBtZXJnZWQgYmFjayB5ZXQsIHJlYWQgYmVmb3JlIHRoaXMgb25lIHBhcmtzIGFueXRoaW5nIG9mIGl0cyBvd24uXG4gICAgICAgIGNvbnN0IHBhcmtlZEVsc2V3aGVyZSA9XG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRvQXJyYXkocmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXSA/PyBbXSlcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gICAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdLFxuICAgICAgICAgICAgcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpLFxuICAgICAgICAgICAgcGFya2VkRWxzZXdoZXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmNvbnN0IERBVEFTRVRfT1BfQUREX09QVElPTlMgPSB7XG4gIGF1dG9DcmVhdGVMYXllcnM6IHRydWUsXG4gIGNlbnRlck1hcDogZmFsc2UsXG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KHN0YXRlOiBWaXNTdGF0ZSwgcHJvdG86IFByb3RvRGF0YXNldCk6IFZpc1N0YXRlIHtcbiAgY29uc3QgcmVzdWx0SWQgPSBwcm90by5pbmZvLmlkO1xuICBpZiAoIXJlc3VsdElkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChzdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF0pIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge2RhdGFJZDogcmVzdWx0SWQsIGRhdGE6IHByb3RvLmRhdGF9KTtcbiAgICBjb25zdCBleGlzdGluZyA9IG5leHRTdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF07XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9XG4gICAgZXhpc3RpbmcubWV0YWRhdGEgPSB7XG4gICAgICAuLi5leGlzdGluZy5tZXRhZGF0YSxcbiAgICAgIC4uLnByb3RvLm1ldGFkYXRhXG4gICAgfTtcbiAgICBleGlzdGluZy5sYWJlbCA9IHByb3RvLmluZm8ubGFiZWwgfHwgZXhpc3RpbmcubGFiZWw7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czogcHJvdG8sXG4gICAgb3B0aW9uczogREFUQVNFVF9PUF9BRERfT1BUSU9OU1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkdyb3VwQnlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1bkdyb3VwQnlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlR3JvdXBCeShzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuSm9pblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVKb2luKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5TcGF0aWFsSm9pblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuU3BhdGlhbEpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlU3BhdGlhbEpvaW4oc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQVlBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQWtDQSxJQUFBYyxNQUFBLEdBQUFkLE9BQUE7QUF1Q0EsSUFBQWUsWUFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLFVBQUEsR0FBQWhCLE9BQUE7QUFtQ0EsSUFBQWlCLE9BQUEsR0FBQWpCLE9BQUE7QUFD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
|