@kepler.gl/reducers 3.3.0-alpha.10 → 3.3.0-alpha.11
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 +1 -1
- package/dist/cjs/layer-utils.js +1 -1
- package/dist/cjs/map-state-updaters.js +1 -1
- package/dist/cjs/map-style-updaters.js +4 -5
- package/dist/cjs/merger-handler.js +2 -2
- package/dist/cjs/middleware.js +4 -6
- package/dist/cjs/provider-state-updaters.js +15 -16
- package/dist/cjs/root.js +2 -2
- package/dist/cjs/vis-state-merger.js +43 -21
- package/dist/cjs/vis-state-selectors.js +26 -8
- package/dist/cjs/vis-state-updaters.js +214 -164
- package/dist/esm/combined-updaters.js +1 -1
- package/dist/esm/layer-utils.js +1 -1
- package/dist/esm/map-state-updaters.js +1 -1
- package/dist/esm/map-style-updaters.js +2 -2
- package/dist/esm/merger-handler.js +2 -2
- package/dist/esm/middleware.js +4 -6
- package/dist/esm/provider-state-updaters.js +4 -4
- package/dist/esm/root.js +2 -2
- package/dist/esm/vis-state-merger.js +39 -18
- package/dist/esm/vis-state-selectors.js +25 -7
- package/dist/esm/vis-state-updaters.js +210 -159
- package/dist/middleware.d.ts +2 -2
- package/dist/root.d.ts +1 -1
- package/dist/vis-state-selectors.d.ts +53 -6
- package/dist/vis-state-updaters.d.ts +4 -3
- package/package.json +16 -17
|
@@ -101,8 +101,8 @@ exports.wmsFeatureInfoUpdater = wmsFeatureInfoUpdater;
|
|
|
101
101
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
102
102
|
var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
|
|
103
103
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
104
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
105
104
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
105
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
106
106
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
107
107
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
108
108
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
@@ -116,8 +116,7 @@ var _isEqual = _interopRequireDefault(require("es-toolkit/compat/isEqual"));
|
|
|
116
116
|
var _pick = _interopRequireDefault(require("es-toolkit/compat/pick"));
|
|
117
117
|
var _uniq = _interopRequireDefault(require("es-toolkit/compat/uniq"));
|
|
118
118
|
var _xor = _interopRequireDefault(require("es-toolkit/compat/xor"));
|
|
119
|
-
var _tasks = _interopRequireWildcard(require("
|
|
120
|
-
var _tasks2 = require("@kepler.gl/tasks");
|
|
119
|
+
var _tasks = _interopRequireWildcard(require("@kepler.gl/tasks"));
|
|
121
120
|
var _actions = require("@kepler.gl/actions");
|
|
122
121
|
var _utils = require("@kepler.gl/utils");
|
|
123
122
|
var _commonUtils = require("@kepler.gl/common-utils");
|
|
@@ -148,8 +147,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
148
147
|
// Actions
|
|
149
148
|
// Utils
|
|
150
149
|
// Mergers
|
|
151
|
-
//
|
|
152
|
-
// disable capture exception for react-palm call to withTask
|
|
150
|
+
// disable stack capture for withTask calls that happen outside strict reducer context
|
|
153
151
|
(0, _tasks.disableStackCapturing)();
|
|
154
152
|
|
|
155
153
|
/**
|
|
@@ -941,6 +939,29 @@ function layerTypeChangeUpdater(state, action) {
|
|
|
941
939
|
return newState;
|
|
942
940
|
}
|
|
943
941
|
|
|
942
|
+
/**
|
|
943
|
+
* Bind visual channel fields to the dataset field of the same name.
|
|
944
|
+
* `addDataToMap` and `layerVisualChannelConfigChange` often pass `{name, type}`
|
|
945
|
+
* or processor fields whose valueAccessor is not bound to the KeplerTable, which
|
|
946
|
+
* leaves strokeColorDomain at `[0, 1]` (kepler.gl #3061).
|
|
947
|
+
*/
|
|
948
|
+
function resolveVisualChannelFieldFromDataset(newConfig, dataset, visualChannel) {
|
|
949
|
+
if (!dataset || !visualChannel) {
|
|
950
|
+
return newConfig;
|
|
951
|
+
}
|
|
952
|
+
var incoming = newConfig[visualChannel.field];
|
|
953
|
+
if (!incoming || (0, _typeof2["default"])(incoming) !== 'object' || !incoming.name) {
|
|
954
|
+
return newConfig;
|
|
955
|
+
}
|
|
956
|
+
var found = dataset.fields.find(function (fd) {
|
|
957
|
+
return fd.name === incoming.name;
|
|
958
|
+
});
|
|
959
|
+
if (!found) {
|
|
960
|
+
return newConfig;
|
|
961
|
+
}
|
|
962
|
+
return _objectSpread(_objectSpread({}, newConfig), {}, (0, _defineProperty2["default"])({}, visualChannel.field, found));
|
|
963
|
+
}
|
|
964
|
+
|
|
944
965
|
/**
|
|
945
966
|
* Update layer visual channel
|
|
946
967
|
* @memberof visStateUpdaters
|
|
@@ -949,13 +970,13 @@ function layerTypeChangeUpdater(state, action) {
|
|
|
949
970
|
*/
|
|
950
971
|
function layerVisualChannelChangeUpdater(state, action) {
|
|
951
972
|
var oldLayer = action.oldLayer,
|
|
952
|
-
newConfig = action.newConfig,
|
|
953
973
|
newVisConfig = action.newVisConfig,
|
|
954
974
|
channel = action.channel;
|
|
955
975
|
if (!oldLayer.config.dataId) {
|
|
956
976
|
return state;
|
|
957
977
|
}
|
|
958
978
|
var dataset = state.datasets[oldLayer.config.dataId];
|
|
979
|
+
var newConfig = resolveVisualChannelFieldFromDataset(action.newConfig, dataset, oldLayer.visualChannels[channel]);
|
|
959
980
|
var idx = state.layers.findIndex(function (l) {
|
|
960
981
|
return l.id === oldLayer.id;
|
|
961
982
|
});
|
|
@@ -1251,7 +1272,7 @@ function _removeFilterDataIdAtValueIndex(filter, valueIndex, datasets) {
|
|
|
1251
1272
|
if (dataId) {
|
|
1252
1273
|
filter = (0, _utils.removeFilterPlot)(filter, dataId);
|
|
1253
1274
|
}
|
|
1254
|
-
for (var _i = 0, _arr = ['dataId', 'name', 'fieldIdx', 'gpuChannel']; _i < _arr.length; _i++) {
|
|
1275
|
+
for (var _i = 0, _arr = ['dataId', 'name', 'fieldIdx', 'gpuChannel', 'endName', 'endFieldIdx', 'endMappedValue', 'gpuEndChannel']; _i < _arr.length; _i++) {
|
|
1255
1276
|
var prop = _arr[_i];
|
|
1256
1277
|
if (Array.isArray(filter[prop])) {
|
|
1257
1278
|
var nextVal = filter[prop].slice();
|
|
@@ -1313,6 +1334,25 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1313
1334
|
// only filter the current dataset
|
|
1314
1335
|
break;
|
|
1315
1336
|
}
|
|
1337
|
+
case _utils.FILTER_UPDATER_PROPS.endName:
|
|
1338
|
+
{
|
|
1339
|
+
var _datasetId = filter.dataId[valueIndex];
|
|
1340
|
+
var _applyTimeFilterEndFi = (0, _utils.applyTimeFilterEndFieldName)(filter, state.datasets, _datasetId, value, valueIndex),
|
|
1341
|
+
_updatedFilter = _applyTimeFilterEndFi.filter,
|
|
1342
|
+
_newDataset = _applyTimeFilterEndFi.dataset;
|
|
1343
|
+
if (_updatedFilter) {
|
|
1344
|
+
filter = _updatedFilter;
|
|
1345
|
+
filter = (0, _table.setFilterGpuMode)(filter, state.filters);
|
|
1346
|
+
filter = filter.gpu ? (0, _table.assignGpuChannel)(filter, state.filters) : _objectSpread(_objectSpread({}, filter), {}, {
|
|
1347
|
+
gpuChannel: undefined,
|
|
1348
|
+
gpuEndChannel: undefined
|
|
1349
|
+
});
|
|
1350
|
+
state = (0, _utils.set)(['datasets', _datasetId], _newDataset, state);
|
|
1351
|
+
filter = (0, _utils.removeFilterPlot)(filter, _datasetId);
|
|
1352
|
+
datasetIdsToFilter = _updatedFilter.dataId;
|
|
1353
|
+
}
|
|
1354
|
+
break;
|
|
1355
|
+
}
|
|
1316
1356
|
case _utils.FILTER_UPDATER_PROPS.layerId:
|
|
1317
1357
|
{
|
|
1318
1358
|
// We need to update only datasetId/s if we have added/removed layers
|
|
@@ -2180,9 +2220,13 @@ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpd
|
|
|
2180
2220
|
// ANNOTATION UPDATERS
|
|
2181
2221
|
|
|
2182
2222
|
function makeNewAnnotation(config) {
|
|
2183
|
-
var _config$kind, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength,
|
|
2223
|
+
var _config$kind, _ref13, _config$textSide, _ref14, _config$textVerticalP, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength, _armLength2, _armLength3, _radiusInMeters;
|
|
2184
2224
|
var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : _constants.INITIAL_ANNOTATION_KIND;
|
|
2185
|
-
var
|
|
2225
|
+
var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
|
|
2226
|
+
var derivedFromAngle = providedAngle != null ? (0, _constants.textPlacementFromAngle)(providedAngle) : undefined;
|
|
2227
|
+
var textSide = (_ref13 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref13 !== void 0 ? _ref13 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_SIDE;
|
|
2228
|
+
var textVerticalPosition = (_ref14 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref14 !== void 0 ? _ref14 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
|
|
2229
|
+
var base = _objectSpread(_objectSpread(_objectSpread({
|
|
2186
2230
|
id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : (0, _commonUtils.generateHashId)(6),
|
|
2187
2231
|
kind: kind,
|
|
2188
2232
|
isVisible: (_config$isVisible = config === null || config === void 0 ? void 0 : config.isVisible) !== null && _config$isVisible !== void 0 ? _config$isVisible : true,
|
|
@@ -2194,27 +2238,33 @@ function makeNewAnnotation(config) {
|
|
|
2194
2238
|
lineWidth: (_config$lineWidth = config === null || config === void 0 ? void 0 : config.lineWidth) !== null && _config$lineWidth !== void 0 ? _config$lineWidth : _constants.INITIAL_ANNOTATION_LINE_WIDTH,
|
|
2195
2239
|
textWidth: (_config$textWidth = config === null || config === void 0 ? void 0 : config.textWidth) !== null && _config$textWidth !== void 0 ? _config$textWidth : _constants.INITIAL_ANNOTATION_TEXT_WIDTH,
|
|
2196
2240
|
textHeight: (_config$textHeight = config === null || config === void 0 ? void 0 : config.textHeight) !== null && _config$textHeight !== void 0 ? _config$textHeight : _constants.INITIAL_ANNOTATION_TEXT_HEIGHT,
|
|
2197
|
-
textVerticalAlign: (_config$textVerticalA = config === null || config === void 0 ? void 0 : config.textVerticalAlign) !== null && _config$textVerticalA !== void 0 ? _config$textVerticalA : 'bottom'
|
|
2241
|
+
textVerticalAlign: (_config$textVerticalA = config === null || config === void 0 ? void 0 : config.textVerticalAlign) !== null && _config$textVerticalA !== void 0 ? _config$textVerticalA : 'bottom'
|
|
2242
|
+
}, textSide ? {
|
|
2243
|
+
textSide: textSide
|
|
2244
|
+
} : {}), textVerticalPosition ? {
|
|
2245
|
+
textVerticalPosition: textVerticalPosition
|
|
2246
|
+
} : {}), {}, {
|
|
2198
2247
|
mapIndex: config === null || config === void 0 ? void 0 : config.mapIndex
|
|
2199
|
-
};
|
|
2248
|
+
});
|
|
2249
|
+
var defaultAngle = textSide && textVerticalPosition ? _constants.ANNOTATION_ANGLE_BY_PLACEMENT["".concat(textSide, "-").concat(textVerticalPosition)] : _constants.INITIAL_ANNOTATION_ANGLE;
|
|
2200
2250
|
switch (kind) {
|
|
2201
2251
|
case _constants.AnnotationKind.POINT:
|
|
2202
2252
|
return _objectSpread(_objectSpread({}, base), {}, {
|
|
2203
2253
|
kind: _constants.AnnotationKind.POINT,
|
|
2204
2254
|
armLength: (_armLength = config === null || config === void 0 ? void 0 : config.armLength) !== null && _armLength !== void 0 ? _armLength : _constants.INITIAL_ANNOTATION_ARM_LENGTH,
|
|
2205
|
-
angle:
|
|
2255
|
+
angle: providedAngle !== null && providedAngle !== void 0 ? providedAngle : defaultAngle
|
|
2206
2256
|
});
|
|
2207
2257
|
case _constants.AnnotationKind.ARROW:
|
|
2208
2258
|
return _objectSpread(_objectSpread({}, base), {}, {
|
|
2209
2259
|
kind: _constants.AnnotationKind.ARROW,
|
|
2210
2260
|
armLength: (_armLength2 = config === null || config === void 0 ? void 0 : config.armLength) !== null && _armLength2 !== void 0 ? _armLength2 : _constants.INITIAL_ANNOTATION_ARM_LENGTH,
|
|
2211
|
-
angle:
|
|
2261
|
+
angle: providedAngle !== null && providedAngle !== void 0 ? providedAngle : defaultAngle
|
|
2212
2262
|
});
|
|
2213
2263
|
case _constants.AnnotationKind.CIRCLE:
|
|
2214
2264
|
return _objectSpread(_objectSpread({}, base), {}, {
|
|
2215
2265
|
kind: _constants.AnnotationKind.CIRCLE,
|
|
2216
2266
|
armLength: (_armLength3 = config === null || config === void 0 ? void 0 : config.armLength) !== null && _armLength3 !== void 0 ? _armLength3 : _constants.INITIAL_ANNOTATION_ARM_LENGTH,
|
|
2217
|
-
angle:
|
|
2267
|
+
angle: providedAngle !== null && providedAngle !== void 0 ? providedAngle : defaultAngle,
|
|
2218
2268
|
radiusInMeters: (_radiusInMeters = config === null || config === void 0 ? void 0 : config.radiusInMeters) !== null && _radiusInMeters !== void 0 ? _radiusInMeters : 1000
|
|
2219
2269
|
});
|
|
2220
2270
|
case _constants.AnnotationKind.TEXT:
|
|
@@ -2244,8 +2294,8 @@ var addAnnotationUpdater = exports.addAnnotationUpdater = function addAnnotation
|
|
|
2244
2294
|
* @memberof visStateUpdaters
|
|
2245
2295
|
* @public
|
|
2246
2296
|
*/
|
|
2247
|
-
var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state,
|
|
2248
|
-
var id =
|
|
2297
|
+
var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
|
|
2298
|
+
var id = _ref15.id;
|
|
2249
2299
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2250
2300
|
annotations: state.annotations.filter(function (a) {
|
|
2251
2301
|
return a.id !== id;
|
|
@@ -2260,9 +2310,9 @@ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeA
|
|
|
2260
2310
|
* @memberof visStateUpdaters
|
|
2261
2311
|
* @public
|
|
2262
2312
|
*/
|
|
2263
|
-
var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state,
|
|
2264
|
-
var id =
|
|
2265
|
-
config =
|
|
2313
|
+
var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
|
|
2314
|
+
var id = _ref16.id,
|
|
2315
|
+
config = _ref16.config;
|
|
2266
2316
|
var idx = state.annotations.findIndex(function (a) {
|
|
2267
2317
|
return a.id === id;
|
|
2268
2318
|
});
|
|
@@ -2289,8 +2339,8 @@ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateA
|
|
|
2289
2339
|
* @memberof visStateUpdaters
|
|
2290
2340
|
* @public
|
|
2291
2341
|
*/
|
|
2292
|
-
var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state,
|
|
2293
|
-
var id =
|
|
2342
|
+
var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
|
|
2343
|
+
var id = _ref17.id;
|
|
2294
2344
|
var original = state.annotations.find(function (a) {
|
|
2295
2345
|
return a.id === id;
|
|
2296
2346
|
});
|
|
@@ -2314,9 +2364,9 @@ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function d
|
|
|
2314
2364
|
* @memberof visStateUpdaters
|
|
2315
2365
|
* @public
|
|
2316
2366
|
*/
|
|
2317
|
-
var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state,
|
|
2318
|
-
var id =
|
|
2319
|
-
isEditingText =
|
|
2367
|
+
var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
|
|
2368
|
+
var id = _ref18.id,
|
|
2369
|
+
isEditingText = _ref18.isEditingText;
|
|
2320
2370
|
if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
|
|
2321
2371
|
return state;
|
|
2322
2372
|
}
|
|
@@ -2387,8 +2437,8 @@ function removeDatasetUpdater(state, action) {
|
|
|
2387
2437
|
dataId: datasetKey
|
|
2388
2438
|
});
|
|
2389
2439
|
}
|
|
2390
|
-
function removeDatasetFromInteractionConfig(state,
|
|
2391
|
-
var dataId =
|
|
2440
|
+
function removeDatasetFromInteractionConfig(state, _ref19) {
|
|
2441
|
+
var dataId = _ref19.dataId;
|
|
2392
2442
|
var interactionConfig = state.interactionConfig;
|
|
2393
2443
|
var _interactionConfig = interactionConfig,
|
|
2394
2444
|
tooltip = _interactionConfig.tooltip;
|
|
@@ -2473,12 +2523,12 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
|
|
|
2473
2523
|
* @memberof visStateUpdaters
|
|
2474
2524
|
* @public
|
|
2475
2525
|
*/
|
|
2476
|
-
var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state,
|
|
2477
|
-
var
|
|
2478
|
-
|
|
2479
|
-
config =
|
|
2480
|
-
|
|
2481
|
-
options =
|
|
2526
|
+
var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
|
|
2527
|
+
var _ref20$payload = _ref20.payload,
|
|
2528
|
+
_ref20$payload$config = _ref20$payload.config,
|
|
2529
|
+
config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
|
|
2530
|
+
_ref20$payload$option = _ref20$payload.options,
|
|
2531
|
+
options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
|
|
2482
2532
|
if (!config.visState) {
|
|
2483
2533
|
return state;
|
|
2484
2534
|
}
|
|
@@ -2583,8 +2633,8 @@ var mapClickUpdater = exports.mapClickUpdater = function mapClickUpdater(state,
|
|
|
2583
2633
|
* @memberof visStateUpdaters
|
|
2584
2634
|
* @public
|
|
2585
2635
|
*/
|
|
2586
|
-
var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state,
|
|
2587
|
-
var evt =
|
|
2636
|
+
var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
|
|
2637
|
+
var evt = _ref21.evt;
|
|
2588
2638
|
if (Object.values(state.interactionConfig).some(function (config) {
|
|
2589
2639
|
return config.enabled;
|
|
2590
2640
|
})) {
|
|
@@ -2618,9 +2668,9 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
|
|
|
2618
2668
|
* @memberof visStateUpdaters
|
|
2619
2669
|
* @public
|
|
2620
2670
|
*/
|
|
2621
|
-
var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state,
|
|
2622
|
-
var mapIndex =
|
|
2623
|
-
layerId =
|
|
2671
|
+
var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
|
|
2672
|
+
var mapIndex = _ref22.mapIndex,
|
|
2673
|
+
layerId = _ref22.layerId;
|
|
2624
2674
|
var splitMaps = state.splitMaps;
|
|
2625
2675
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2626
2676
|
splitMaps: splitMaps.map(function (sm, i) {
|
|
@@ -2691,7 +2741,7 @@ function _hydrateExternallyHostedProtoDataset() {
|
|
|
2691
2741
|
}
|
|
2692
2742
|
var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromise(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
|
|
2693
2743
|
var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/function () {
|
|
2694
|
-
var
|
|
2744
|
+
var _ref23 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
|
|
2695
2745
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
2696
2746
|
while (1) switch (_context.prev = _context.next) {
|
|
2697
2747
|
case 0:
|
|
@@ -2703,7 +2753,7 @@ var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/functi
|
|
|
2703
2753
|
}, _callee);
|
|
2704
2754
|
}));
|
|
2705
2755
|
return function (_x2) {
|
|
2706
|
-
return
|
|
2756
|
+
return _ref23.apply(this, arguments);
|
|
2707
2757
|
};
|
|
2708
2758
|
}(), 'FAIL_CREATE_DATASET_TASK');
|
|
2709
2759
|
function createNewDataEntryTask(dataset, datasets) {
|
|
@@ -2724,12 +2774,12 @@ function refreshExternallyHostedTable(_x3) {
|
|
|
2724
2774
|
return _refreshExternallyHostedTable.apply(this, arguments);
|
|
2725
2775
|
}
|
|
2726
2776
|
function _refreshExternallyHostedTable() {
|
|
2727
|
-
_refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(
|
|
2777
|
+
_refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref24) {
|
|
2728
2778
|
var metadata, onProgress;
|
|
2729
2779
|
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
2730
2780
|
while (1) switch (_context3.prev = _context3.next) {
|
|
2731
2781
|
case 0:
|
|
2732
|
-
metadata =
|
|
2782
|
+
metadata = _ref24.arg, onProgress = _ref24.onProgress;
|
|
2733
2783
|
return _context3.abrupt("return", (0, _processors.loadExternallyHostedDataset)(_objectSpread(_objectSpread({}, metadata), {}, {
|
|
2734
2784
|
onProgress: onProgress,
|
|
2735
2785
|
bypassCache: true
|
|
@@ -2750,9 +2800,9 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithPr
|
|
|
2750
2800
|
* @memberof visStateUpdaters
|
|
2751
2801
|
* @public
|
|
2752
2802
|
*/
|
|
2753
|
-
function refreshDatasetUpdater(state,
|
|
2803
|
+
function refreshDatasetUpdater(state, _ref25) {
|
|
2754
2804
|
var _dataset$metadata2, _dataset$metadata3;
|
|
2755
|
-
var dataId =
|
|
2805
|
+
var dataId = _ref25.dataId;
|
|
2756
2806
|
var dataset = state.datasets[dataId];
|
|
2757
2807
|
if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
|
|
2758
2808
|
return state;
|
|
@@ -2791,10 +2841,10 @@ function refreshDatasetUpdater(state, _ref23) {
|
|
|
2791
2841
|
* @memberof visStateUpdaters
|
|
2792
2842
|
* @public
|
|
2793
2843
|
*/
|
|
2794
|
-
function refreshDatasetProgressUpdater(state,
|
|
2844
|
+
function refreshDatasetProgressUpdater(state, _ref26) {
|
|
2795
2845
|
var _dataset$metadata4, _dataset$metadata5;
|
|
2796
|
-
var dataId =
|
|
2797
|
-
percent =
|
|
2846
|
+
var dataId = _ref26.dataId,
|
|
2847
|
+
percent = _ref26.percent;
|
|
2798
2848
|
var dataset = state.datasets[dataId];
|
|
2799
2849
|
if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
|
|
2800
2850
|
return state;
|
|
@@ -2884,10 +2934,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
|
|
|
2884
2934
|
* @memberof visStateUpdaters
|
|
2885
2935
|
* @public
|
|
2886
2936
|
*/
|
|
2887
|
-
function refreshDatasetSuccessUpdater(state,
|
|
2937
|
+
function refreshDatasetSuccessUpdater(state, _ref27) {
|
|
2888
2938
|
var _result$data;
|
|
2889
|
-
var dataId =
|
|
2890
|
-
result =
|
|
2939
|
+
var dataId = _ref27.dataId,
|
|
2940
|
+
result = _ref27.result;
|
|
2891
2941
|
var dataset = state.datasets[dataId];
|
|
2892
2942
|
if (!dataset) {
|
|
2893
2943
|
return state;
|
|
@@ -2981,10 +3031,10 @@ function normalizeDatasetRows(rows, fields) {
|
|
|
2981
3031
|
* @memberof visStateUpdaters
|
|
2982
3032
|
* @public
|
|
2983
3033
|
*/
|
|
2984
|
-
function addToDatasetUpdater(state,
|
|
2985
|
-
var dataId =
|
|
2986
|
-
rows =
|
|
2987
|
-
options =
|
|
3034
|
+
function addToDatasetUpdater(state, _ref28) {
|
|
3035
|
+
var dataId = _ref28.dataId,
|
|
3036
|
+
rows = _ref28.rows,
|
|
3037
|
+
options = _ref28.options;
|
|
2988
3038
|
var dataset = state.datasets[dataId];
|
|
2989
3039
|
if (!dataset) {
|
|
2990
3040
|
return state;
|
|
@@ -3009,10 +3059,10 @@ function addToDatasetUpdater(state, _ref26) {
|
|
|
3009
3059
|
* @memberof visStateUpdaters
|
|
3010
3060
|
* @public
|
|
3011
3061
|
*/
|
|
3012
|
-
function removeFromDatasetUpdater(state,
|
|
3013
|
-
var dataId =
|
|
3014
|
-
rowIndexes =
|
|
3015
|
-
byField =
|
|
3062
|
+
function removeFromDatasetUpdater(state, _ref29) {
|
|
3063
|
+
var dataId = _ref29.dataId,
|
|
3064
|
+
rowIndexes = _ref29.rowIndexes,
|
|
3065
|
+
byField = _ref29.byField;
|
|
3016
3066
|
var dataset = state.datasets[dataId];
|
|
3017
3067
|
if (!dataset) {
|
|
3018
3068
|
return state;
|
|
@@ -3035,9 +3085,9 @@ function removeFromDatasetUpdater(state, _ref27) {
|
|
|
3035
3085
|
* @memberof visStateUpdaters
|
|
3036
3086
|
* @public
|
|
3037
3087
|
*/
|
|
3038
|
-
function refreshDatasetErrorUpdater(state,
|
|
3039
|
-
var dataId =
|
|
3040
|
-
error =
|
|
3088
|
+
function refreshDatasetErrorUpdater(state, _ref30) {
|
|
3089
|
+
var dataId = _ref30.dataId,
|
|
3090
|
+
error = _ref30.error;
|
|
3041
3091
|
var dataset = state.datasets[dataId];
|
|
3042
3092
|
if (!dataset) {
|
|
3043
3093
|
return state;
|
|
@@ -3077,10 +3127,10 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3077
3127
|
}
|
|
3078
3128
|
var createDatasetTasks = [];
|
|
3079
3129
|
var notificationTasks = [];
|
|
3080
|
-
datasets.forEach(function (
|
|
3081
|
-
var
|
|
3082
|
-
info =
|
|
3083
|
-
rest = (0, _objectWithoutProperties2["default"])(
|
|
3130
|
+
datasets.forEach(function (_ref31, datasetIndex) {
|
|
3131
|
+
var _ref31$info = _ref31.info,
|
|
3132
|
+
info = _ref31$info === void 0 ? {} : _ref31$info,
|
|
3133
|
+
rest = (0, _objectWithoutProperties2["default"])(_ref31, _excluded2);
|
|
3084
3134
|
var task = createNewDataEntryTask(_objectSpread({
|
|
3085
3135
|
info: info
|
|
3086
3136
|
}, rest), state.datasets);
|
|
@@ -3120,7 +3170,7 @@ var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = fu
|
|
|
3120
3170
|
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, dataset.id, dataset));
|
|
3121
3171
|
} else {
|
|
3122
3172
|
// show error notification on UI
|
|
3123
|
-
notificationTasks.push((0,
|
|
3173
|
+
notificationTasks.push((0, _tasks.ACTION_TASK)().map(function () {
|
|
3124
3174
|
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
3125
3175
|
message: "Dataset error: Failed to create a new dataset:\n ".concat(result.reason || result.value),
|
|
3126
3176
|
id: "dataset-create-failed-".concat(idx)
|
|
@@ -3378,10 +3428,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3378
3428
|
// follow renamed columns
|
|
3379
3429
|
var columnsPatch = {};
|
|
3380
3430
|
var columnsChanged = false;
|
|
3381
|
-
Object.entries(layer.config.columns || {}).forEach(function (
|
|
3382
|
-
var
|
|
3383
|
-
ckey =
|
|
3384
|
-
col =
|
|
3431
|
+
Object.entries(layer.config.columns || {}).forEach(function (_ref32) {
|
|
3432
|
+
var _ref33 = (0, _slicedToArray2["default"])(_ref32, 2),
|
|
3433
|
+
ckey = _ref33[0],
|
|
3434
|
+
col = _ref33[1];
|
|
3385
3435
|
if (col !== null && col !== void 0 && col.value && renames[col.value]) {
|
|
3386
3436
|
columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
|
|
3387
3437
|
value: renames[col.value]
|
|
@@ -3394,8 +3444,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
|
|
|
3394
3444
|
}
|
|
3395
3445
|
|
|
3396
3446
|
// follow renamed visual-channel fields (colorField, sizeField, ...)
|
|
3397
|
-
Object.values(layer.visualChannels).forEach(function (
|
|
3398
|
-
var field =
|
|
3447
|
+
Object.values(layer.visualChannels).forEach(function (_ref34) {
|
|
3448
|
+
var field = _ref34.field;
|
|
3399
3449
|
var fieldConfig = layer.config[field];
|
|
3400
3450
|
if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
|
|
3401
3451
|
configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
|
|
@@ -3664,7 +3714,7 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3664
3714
|
var stateWithCache = (0, _composerHelpers.pick_)('fileLoading')((0, _composerHelpers.merge_)({
|
|
3665
3715
|
fileCache: fileCache
|
|
3666
3716
|
}))(stateWithProgress);
|
|
3667
|
-
return (0, _tasks.withTask)(stateWithCache, (0,
|
|
3717
|
+
return (0, _tasks.withTask)(stateWithCache, (0, _tasks.DELAY_TASK)(200).map(filesToLoad.length ? _actions.loadNextFile : function () {
|
|
3668
3718
|
return onFinish(fileCache);
|
|
3669
3719
|
}));
|
|
3670
3720
|
}
|
|
@@ -3703,7 +3753,7 @@ function loadNextFileUpdater(state) {
|
|
|
3703
3753
|
function makeLoadFileTask(file, fileCache) {
|
|
3704
3754
|
var loaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
3705
3755
|
var loadOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
3706
|
-
return (0,
|
|
3756
|
+
return (0, _tasks.LOAD_FILE_TASK)({
|
|
3707
3757
|
file: file,
|
|
3708
3758
|
fileCache: fileCache,
|
|
3709
3759
|
loaders: loaders,
|
|
@@ -3745,7 +3795,7 @@ function processFileContentUpdater(state, action) {
|
|
|
3745
3795
|
message: 'processing...'
|
|
3746
3796
|
}
|
|
3747
3797
|
});
|
|
3748
|
-
return (0, _tasks.withTask)(stateWithProgress, (0,
|
|
3798
|
+
return (0, _tasks.withTask)(stateWithProgress, (0, _tasks.PROCESS_FILE_DATA)({
|
|
3749
3799
|
content: content,
|
|
3750
3800
|
fileCache: fileCache
|
|
3751
3801
|
}).bimap(function (result) {
|
|
@@ -3777,14 +3827,14 @@ function parseProgress() {
|
|
|
3777
3827
|
* @memberof visStateUpdaters
|
|
3778
3828
|
* @public
|
|
3779
3829
|
*/
|
|
3780
|
-
var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state,
|
|
3830
|
+
var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
|
|
3781
3831
|
var _accumulated$data;
|
|
3782
|
-
var
|
|
3783
|
-
gen =
|
|
3784
|
-
fileName =
|
|
3785
|
-
progress =
|
|
3786
|
-
accumulated =
|
|
3787
|
-
onFinish =
|
|
3832
|
+
var _ref35$payload = _ref35.payload,
|
|
3833
|
+
gen = _ref35$payload.gen,
|
|
3834
|
+
fileName = _ref35$payload.fileName,
|
|
3835
|
+
progress = _ref35$payload.progress,
|
|
3836
|
+
accumulated = _ref35$payload.accumulated,
|
|
3837
|
+
onFinish = _ref35$payload.onFinish;
|
|
3788
3838
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
3789
3839
|
fileName: fileName,
|
|
3790
3840
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
@@ -3792,7 +3842,7 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
3792
3842
|
return (0, _tasks.withTask)(stateWithProgress, [].concat((0, _toConsumableArray2["default"])((0, _utils.getApplicationConfig)().useArrowProgressiveLoading && fileName.endsWith('arrow') && (accumulated === null || accumulated === void 0 || (_accumulated$data = accumulated.data) === null || _accumulated$data === void 0 ? void 0 : _accumulated$data.length) > 0 ? [
|
|
3793
3843
|
// Skip compaction while batches are still arriving. The completed
|
|
3794
3844
|
// file is compacted once in processFileContent.
|
|
3795
|
-
(0,
|
|
3845
|
+
(0, _tasks.PROCESS_FILE_DATA)({
|
|
3796
3846
|
content: _objectSpread(_objectSpread({}, accumulated), {}, {
|
|
3797
3847
|
skipArrowCompact: true
|
|
3798
3848
|
}),
|
|
@@ -3801,9 +3851,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
3801
3851
|
return (0, _actions.loadFilesSuccess)(result);
|
|
3802
3852
|
}, function (err) {
|
|
3803
3853
|
return (0, _actions.loadFilesErr)(fileName, err);
|
|
3804
|
-
})] : []), [(0,
|
|
3805
|
-
var value =
|
|
3806
|
-
done =
|
|
3854
|
+
})] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref36) {
|
|
3855
|
+
var value = _ref36.value,
|
|
3856
|
+
done = _ref36.done;
|
|
3807
3857
|
return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
|
|
3808
3858
|
gen: gen,
|
|
3809
3859
|
fileName: fileName,
|
|
@@ -3821,9 +3871,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
3821
3871
|
* @memberof visStateUpdaters
|
|
3822
3872
|
* @public
|
|
3823
3873
|
*/
|
|
3824
|
-
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state,
|
|
3825
|
-
var error =
|
|
3826
|
-
fileName =
|
|
3874
|
+
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
|
|
3875
|
+
var error = _ref37.error,
|
|
3876
|
+
fileName = _ref37.fileName;
|
|
3827
3877
|
// update ui with error message
|
|
3828
3878
|
_window.console.warn(error);
|
|
3829
3879
|
if (!state.fileLoading) {
|
|
@@ -3841,7 +3891,7 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
|
|
|
3841
3891
|
});
|
|
3842
3892
|
|
|
3843
3893
|
// kick off next file or finish
|
|
3844
|
-
return (0, _tasks.withTask)(nextState, (0,
|
|
3894
|
+
return (0, _tasks.withTask)(nextState, (0, _tasks.DELAY_TASK)(200).map(filesToLoad.length ? _actions.loadNextFile : function () {
|
|
3845
3895
|
return onFinish(fileCache);
|
|
3846
3896
|
}));
|
|
3847
3897
|
};
|
|
@@ -3851,8 +3901,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
|
|
|
3851
3901
|
* @memberof visStateUpdaters
|
|
3852
3902
|
* @public
|
|
3853
3903
|
*/
|
|
3854
|
-
var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state,
|
|
3855
|
-
var dataId =
|
|
3904
|
+
var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref38) {
|
|
3905
|
+
var dataId = _ref38.dataId;
|
|
3856
3906
|
// apply cpuFilter
|
|
3857
3907
|
var dataIds = (0, _commonUtils.toArray)(dataId);
|
|
3858
3908
|
return dataIds.reduce(function (accu, id) {
|
|
@@ -3911,9 +3961,9 @@ function initialFileLoadingProgress(file, index) {
|
|
|
3911
3961
|
error: null
|
|
3912
3962
|
});
|
|
3913
3963
|
}
|
|
3914
|
-
function updateFileLoadingProgressUpdater(state,
|
|
3915
|
-
var fileName =
|
|
3916
|
-
progress =
|
|
3964
|
+
function updateFileLoadingProgressUpdater(state, _ref40) {
|
|
3965
|
+
var fileName = _ref40.fileName,
|
|
3966
|
+
progress = _ref40.progress;
|
|
3917
3967
|
// @ts-expect-error
|
|
3918
3968
|
return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
|
|
3919
3969
|
}
|
|
@@ -4005,8 +4055,8 @@ function updateAnimationDomain(state) {
|
|
|
4005
4055
|
* Update the status of the editor
|
|
4006
4056
|
* @memberof visStateUpdaters
|
|
4007
4057
|
*/
|
|
4008
|
-
var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state,
|
|
4009
|
-
var mode =
|
|
4058
|
+
var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
|
|
4059
|
+
var mode = _ref41.mode;
|
|
4010
4060
|
var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
|
|
4011
4061
|
if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
|
|
4012
4062
|
return state;
|
|
@@ -4024,10 +4074,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
|
|
|
4024
4074
|
* Update editor features
|
|
4025
4075
|
* @memberof visStateUpdaters
|
|
4026
4076
|
*/
|
|
4027
|
-
function setFeaturesUpdater(state,
|
|
4077
|
+
function setFeaturesUpdater(state, _ref42) {
|
|
4028
4078
|
var _lastFeature$properti, _lastFeature$properti2;
|
|
4029
|
-
var
|
|
4030
|
-
features =
|
|
4079
|
+
var _ref42$features = _ref42.features,
|
|
4080
|
+
features = _ref42$features === void 0 ? [] : _ref42$features;
|
|
4031
4081
|
var lastFeature = features.length && features[features.length - 1];
|
|
4032
4082
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4033
4083
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
@@ -4100,10 +4150,10 @@ function findEditorFeature(state, feature) {
|
|
|
4100
4150
|
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
4101
4151
|
* @memberof visStateUpdaters
|
|
4102
4152
|
*/
|
|
4103
|
-
function setEditorFeaturePropertiesUpdater(state,
|
|
4153
|
+
function setEditorFeaturePropertiesUpdater(state, _ref43) {
|
|
4104
4154
|
var _state$editor$selecte2;
|
|
4105
|
-
var feature =
|
|
4106
|
-
properties =
|
|
4155
|
+
var feature = _ref43.feature,
|
|
4156
|
+
properties = _ref43.properties;
|
|
4107
4157
|
if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
|
|
4108
4158
|
return state;
|
|
4109
4159
|
}
|
|
@@ -4142,9 +4192,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref41) {
|
|
|
4142
4192
|
* Set the current selected feature
|
|
4143
4193
|
* @memberof uiStateUpdaters
|
|
4144
4194
|
*/
|
|
4145
|
-
var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
4146
|
-
var feature =
|
|
4147
|
-
selectionContext =
|
|
4195
|
+
var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref44) {
|
|
4196
|
+
var feature = _ref44.feature,
|
|
4197
|
+
selectionContext = _ref44.selectionContext;
|
|
4148
4198
|
// add bbox for polygon filter to speed up filtering
|
|
4149
4199
|
var selectedFeature = feature;
|
|
4150
4200
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -4166,8 +4216,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
|
|
|
4166
4216
|
* Delete existing feature from filters
|
|
4167
4217
|
* @memberof visStateUpdaters
|
|
4168
4218
|
*/
|
|
4169
|
-
function deleteFeatureUpdater(state,
|
|
4170
|
-
var feature =
|
|
4219
|
+
function deleteFeatureUpdater(state, _ref45) {
|
|
4220
|
+
var feature = _ref45.feature;
|
|
4171
4221
|
if (!feature) {
|
|
4172
4222
|
return state;
|
|
4173
4223
|
}
|
|
@@ -4312,10 +4362,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
4312
4362
|
* @memberof visStateUpdaters
|
|
4313
4363
|
* @public
|
|
4314
4364
|
*/
|
|
4315
|
-
function sortTableColumnUpdater(state,
|
|
4316
|
-
var dataId =
|
|
4317
|
-
column =
|
|
4318
|
-
mode =
|
|
4365
|
+
function sortTableColumnUpdater(state, _ref46) {
|
|
4366
|
+
var dataId = _ref46.dataId,
|
|
4367
|
+
column = _ref46.column,
|
|
4368
|
+
mode = _ref46.mode;
|
|
4319
4369
|
var dataset = state.datasets[dataId];
|
|
4320
4370
|
if (!dataset) {
|
|
4321
4371
|
return state;
|
|
@@ -4336,9 +4386,9 @@ function sortTableColumnUpdater(state, _ref44) {
|
|
|
4336
4386
|
* @memberof visStateUpdaters
|
|
4337
4387
|
* @public
|
|
4338
4388
|
*/
|
|
4339
|
-
function pinTableColumnUpdater(state,
|
|
4340
|
-
var dataId =
|
|
4341
|
-
column =
|
|
4389
|
+
function pinTableColumnUpdater(state, _ref47) {
|
|
4390
|
+
var dataId = _ref47.dataId,
|
|
4391
|
+
column = _ref47.column;
|
|
4342
4392
|
var dataset = state.datasets[dataId];
|
|
4343
4393
|
if (!dataset) {
|
|
4344
4394
|
return state;
|
|
@@ -4352,9 +4402,9 @@ function pinTableColumnUpdater(state, _ref45) {
|
|
|
4352
4402
|
* @memberof visStateUpdaters
|
|
4353
4403
|
* @public
|
|
4354
4404
|
*/
|
|
4355
|
-
function copyTableColumnUpdater(state,
|
|
4356
|
-
var dataId =
|
|
4357
|
-
column =
|
|
4405
|
+
function copyTableColumnUpdater(state, _ref48) {
|
|
4406
|
+
var dataId = _ref48.dataId,
|
|
4407
|
+
column = _ref48.column;
|
|
4358
4408
|
var dataset = state.datasets[dataId];
|
|
4359
4409
|
if (!dataset) {
|
|
4360
4410
|
return state;
|
|
@@ -4378,9 +4428,9 @@ function copyTableColumnUpdater(state, _ref46) {
|
|
|
4378
4428
|
* @memberof visStateUpdaters
|
|
4379
4429
|
* @public
|
|
4380
4430
|
*/
|
|
4381
|
-
function setColumnDisplayFormatUpdater(state,
|
|
4382
|
-
var dataId =
|
|
4383
|
-
formats =
|
|
4431
|
+
function setColumnDisplayFormatUpdater(state, _ref49) {
|
|
4432
|
+
var dataId = _ref49.dataId,
|
|
4433
|
+
formats = _ref49.formats;
|
|
4384
4434
|
var dataset = state.datasets[dataId];
|
|
4385
4435
|
if (!dataset) {
|
|
4386
4436
|
return state;
|
|
@@ -4431,12 +4481,12 @@ function requestDatasetColumnStatistics(_x4) {
|
|
|
4431
4481
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
4432
4482
|
}
|
|
4433
4483
|
function _requestDatasetColumnStatistics() {
|
|
4434
|
-
_requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(
|
|
4484
|
+
_requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref50) {
|
|
4435
4485
|
var dataset, field, filterProps, mappedValue, values, result;
|
|
4436
4486
|
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
4437
4487
|
while (1) switch (_context4.prev = _context4.next) {
|
|
4438
4488
|
case 0:
|
|
4439
|
-
dataset =
|
|
4489
|
+
dataset = _ref50.dataset, field = _ref50.field;
|
|
4440
4490
|
_context4.next = 3;
|
|
4441
4491
|
return yieldForPaint();
|
|
4442
4492
|
case 3:
|
|
@@ -4469,9 +4519,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
|
|
|
4469
4519
|
* @memberof visStateUpdaters
|
|
4470
4520
|
* @public
|
|
4471
4521
|
*/
|
|
4472
|
-
function loadColumnStatsUpdater(state,
|
|
4473
|
-
var dataId =
|
|
4474
|
-
fieldName =
|
|
4522
|
+
function loadColumnStatsUpdater(state, _ref51) {
|
|
4523
|
+
var dataId = _ref51.dataId,
|
|
4524
|
+
fieldName = _ref51.fieldName;
|
|
4475
4525
|
var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
|
|
4476
4526
|
var dataset = state.datasets[dataId];
|
|
4477
4527
|
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
@@ -4492,9 +4542,9 @@ function loadColumnStatsUpdater(state, _ref49) {
|
|
|
4492
4542
|
return LOAD_COLUMN_STATS_TASK({
|
|
4493
4543
|
dataset: newDataset,
|
|
4494
4544
|
field: f
|
|
4495
|
-
}).bimap(function (
|
|
4496
|
-
var result =
|
|
4497
|
-
filterProps =
|
|
4545
|
+
}).bimap(function (_ref52) {
|
|
4546
|
+
var result = _ref52.result,
|
|
4547
|
+
filterProps = _ref52.filterProps;
|
|
4498
4548
|
return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
|
|
4499
4549
|
}, function (error) {
|
|
4500
4550
|
return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
|
|
@@ -4509,11 +4559,11 @@ function loadColumnStatsUpdater(state, _ref49) {
|
|
|
4509
4559
|
* @memberof visStateUpdaters
|
|
4510
4560
|
* @public
|
|
4511
4561
|
*/
|
|
4512
|
-
function loadColumnStatsSuccessUpdater(state,
|
|
4513
|
-
var result =
|
|
4514
|
-
filterProps =
|
|
4515
|
-
dataId =
|
|
4516
|
-
fieldName =
|
|
4562
|
+
function loadColumnStatsSuccessUpdater(state, _ref53) {
|
|
4563
|
+
var result = _ref53.result,
|
|
4564
|
+
filterProps = _ref53.filterProps,
|
|
4565
|
+
dataId = _ref53.dataId,
|
|
4566
|
+
fieldName = _ref53.fieldName;
|
|
4517
4567
|
var dataset = state.datasets[dataId];
|
|
4518
4568
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
4519
4569
|
return f.name === fieldName;
|
|
@@ -4541,10 +4591,10 @@ function loadColumnStatsSuccessUpdater(state, _ref51) {
|
|
|
4541
4591
|
* @memberof visStateUpdaters
|
|
4542
4592
|
* @public
|
|
4543
4593
|
*/
|
|
4544
|
-
function loadColumnStatsErrorUpdater(state,
|
|
4545
|
-
var error =
|
|
4546
|
-
dataId =
|
|
4547
|
-
fieldName =
|
|
4594
|
+
function loadColumnStatsErrorUpdater(state, _ref54) {
|
|
4595
|
+
var error = _ref54.error,
|
|
4596
|
+
dataId = _ref54.dataId,
|
|
4597
|
+
fieldName = _ref54.fieldName;
|
|
4548
4598
|
_window.console.error(error);
|
|
4549
4599
|
var dataset = state.datasets[dataId];
|
|
4550
4600
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
@@ -4625,9 +4675,9 @@ _action) {
|
|
|
4625
4675
|
}
|
|
4626
4676
|
});
|
|
4627
4677
|
}
|
|
4628
|
-
function setFilterAnimationTimeConfigUpdater(state,
|
|
4629
|
-
var idx =
|
|
4630
|
-
config =
|
|
4678
|
+
function setFilterAnimationTimeConfigUpdater(state, _ref55) {
|
|
4679
|
+
var idx = _ref55.idx,
|
|
4680
|
+
config = _ref55.config;
|
|
4631
4681
|
var oldFilter = state.filters[idx];
|
|
4632
4682
|
if (!oldFilter) {
|
|
4633
4683
|
_window.console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -4657,8 +4707,8 @@ function checkTimeConfigArgs(config) {
|
|
|
4657
4707
|
/**
|
|
4658
4708
|
* Update editor
|
|
4659
4709
|
*/
|
|
4660
|
-
function setLayerAnimationTimeConfigUpdater(state,
|
|
4661
|
-
var config =
|
|
4710
|
+
function setLayerAnimationTimeConfigUpdater(state, _ref56) {
|
|
4711
|
+
var config = _ref56.config;
|
|
4662
4712
|
if (!config) {
|
|
4663
4713
|
return state;
|
|
4664
4714
|
}
|
|
@@ -4856,8 +4906,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
4856
4906
|
* @returns nextState
|
|
4857
4907
|
* @public
|
|
4858
4908
|
*/
|
|
4859
|
-
var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
4860
|
-
var change =
|
|
4909
|
+
var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref57) {
|
|
4910
|
+
var change = _ref57.payload.change;
|
|
4861
4911
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
4862
4912
|
if (!loadingIndicatorValue) {
|
|
4863
4913
|
loadingIndicatorValue = 0;
|
|
@@ -4977,10 +5027,10 @@ function findChildDatasetIds(value) {
|
|
|
4977
5027
|
}
|
|
4978
5028
|
|
|
4979
5029
|
// moved unmerged layers, filters, interactions
|
|
4980
|
-
function moveValueToBeMerged(state, propValues,
|
|
4981
|
-
var prop =
|
|
4982
|
-
toMergeProp =
|
|
4983
|
-
saveUnmerged =
|
|
5030
|
+
function moveValueToBeMerged(state, propValues, _ref59) {
|
|
5031
|
+
var prop = _ref59.prop,
|
|
5032
|
+
toMergeProp = _ref59.toMergeProp,
|
|
5033
|
+
saveUnmerged = _ref59.saveUnmerged;
|
|
4984
5034
|
// remove prop value from state
|
|
4985
5035
|
// TODO: should we add remove updater to merger as well?
|
|
4986
5036
|
if (!propValues) {
|
|
@@ -5037,17 +5087,17 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
|
|
|
5037
5087
|
}
|
|
5038
5088
|
return nextState;
|
|
5039
5089
|
}
|
|
5040
|
-
function replaceDatasetDepsInState(state,
|
|
5041
|
-
var dataId =
|
|
5042
|
-
dataIdToUse =
|
|
5090
|
+
function replaceDatasetDepsInState(state, _ref60) {
|
|
5091
|
+
var dataId = _ref60.dataId,
|
|
5092
|
+
dataIdToUse = _ref60.dataIdToUse;
|
|
5043
5093
|
var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
|
|
5044
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
5045
|
-
var prop =
|
|
5046
|
-
toMergeProp =
|
|
5047
|
-
replaceParentDatasetIds =
|
|
5048
|
-
getChildDatasetIds =
|
|
5049
|
-
saveUnmerged =
|
|
5050
|
-
preserveOrder =
|
|
5094
|
+
var nextState = state.mergers.reduce(function (accuState, _ref61) {
|
|
5095
|
+
var prop = _ref61.prop,
|
|
5096
|
+
toMergeProp = _ref61.toMergeProp,
|
|
5097
|
+
replaceParentDatasetIds = _ref61.replaceParentDatasetIds,
|
|
5098
|
+
getChildDatasetIds = _ref61.getChildDatasetIds,
|
|
5099
|
+
saveUnmerged = _ref61.saveUnmerged,
|
|
5100
|
+
preserveOrder = _ref61.preserveOrder;
|
|
5051
5101
|
// get dataset ids that are depends on this dataset
|
|
5052
5102
|
var props = (0, _commonUtils.toArray)(prop);
|
|
5053
5103
|
var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
|
|
@@ -5075,11 +5125,11 @@ function replaceDatasetDepsInState(state, _ref58) {
|
|
|
5075
5125
|
}, state);
|
|
5076
5126
|
return nextState;
|
|
5077
5127
|
}
|
|
5078
|
-
function replacePropValueInState(state, replacedItem,
|
|
5079
|
-
var prop =
|
|
5080
|
-
toMergeProp =
|
|
5081
|
-
getChildDatasetIds =
|
|
5082
|
-
saveUnmerged =
|
|
5128
|
+
function replacePropValueInState(state, replacedItem, _ref62) {
|
|
5129
|
+
var prop = _ref62.prop,
|
|
5130
|
+
toMergeProp = _ref62.toMergeProp,
|
|
5131
|
+
getChildDatasetIds = _ref62.getChildDatasetIds,
|
|
5132
|
+
saveUnmerged = _ref62.saveUnmerged;
|
|
5083
5133
|
// prop is depends on the dataset to be replaced
|
|
5084
5134
|
// remove prop from state, and move it to toBeMerged
|
|
5085
5135
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -5097,4 +5147,4 @@ function replacePropValueInState(state, replacedItem, _ref60) {
|
|
|
5097
5147
|
}
|
|
5098
5148
|
return nextState;
|
|
5099
5149
|
}
|
|
5100
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3Byb2Nlc3NvcnMiLCJfdGFibGUiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hbmdsZSIsIl9hcm1MZW5ndGgyIiwiX2FuZ2xlMiIsIl9hcm1MZW5ndGgzIiwiX2FuZ2xlMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJJTklUSUFMX0FOTk9UQVRJT05fS0lORCIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiQW5ub3RhdGlvbktpbmQiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiYW5nbGUiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiVEVYVCIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjEzIiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTQiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTUiLCJjbG9uZURlZXAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE2IiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTciLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxOCIsIl9yZWYxOCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxOCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxOCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwiaXNWYWxpZE1lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjE5IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjAiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJCb29sZWFuIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjEiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjIiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyMyIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyNCIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImluY29taW5nIiwiZXZlcnkiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYyNSIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsImlzUGxhaW5PYmplY3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYyNiIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjI3Iiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjI4IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYyOSIsImRhdGFzZXRJbmRleCIsIl9yZWYyOSRpbmZvIiwicmVzdCIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJBQ1RJT05fVEFTSyIsInJlYXNvbiIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJsYXllclZpc0NvbmZpZyIsIl90eXBlb2YyIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJMQVlFUl9UWVBFUyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJmaXRNYXBCb3VuZHMiLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJleGlzdGluZyIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjMwIiwiX3JlZjMxIiwiY2tleSIsImNvbCIsIl9yZWYzMiIsImZpZWxkQ29uZmlnIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwidXBkYXRlU2NoZW1hIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXdGaWVsZHNCeU5hbWUiLCJTZXQiLCJfcmVuYW1lcyRvbGROYW1lIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZmllbGRJZHgiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImZpbHRlclRhYmxlIiwicmVjb25jaWxlZCIsIm5leHRGaWVsZHNUb1Nob3ciLCJmbGF0TWFwIiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjMzIiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzMkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM0IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYzNSIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMzYiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjM4IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjM5Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQwIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0MCRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQxIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0MiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0MyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NCIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NSIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDYiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjQ3IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjQ4IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjQ5IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTAiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1MSIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTIiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNTMiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU0IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiU1lOQ19USU1FTElORV9NT0RFUyIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNTUiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImhleFRpbGVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNTciLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjU4IiwiYWNjdVN0YXRlIiwiX3JlZjU5IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNjAiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsIHByb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgWydkYXRhSWQnLCAnbmFtZScsICdmaWVsZElkeCcsICdncHVDaGFubmVsJ10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiAoY29uZmlnIGFzIGFueSk/LmFuZ2xlID8/IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuZnVuY3Rpb24gaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGE/OiBQcm90b0RhdGFzZXRbJ2RhdGEnXSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZGF0YT8ucm93cz8ubGVuZ3RoIHx8IGRhdGE/LmNvbHM/Lmxlbmd0aCB8fCAoZGF0YSBhcyB7YXJyb3dUYWJsZT86IHVua25vd259KT8uYXJyb3dUYWJsZVxuICApO1xufVxuXG5mdW5jdGlvbiBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFzZXQuaW5mbz8udHlwZSA9PT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgJiZcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJlxuICAgICFoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YXNldC5kYXRhKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldChkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDBcbiAgfSk7XG4gIGlmICghbG9hZGVkLmRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRhdGEgbG9hZGVkIGZyb20gJHtkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2V9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIGRhdGE6IGxvYWRlZC5kYXRhLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgZXRhZzogbG9hZGVkLmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGxvYWRlZC5sYXN0TW9kaWZpZWQsXG4gICAgICAuLi4odHlwZW9mIGxvYWRlZC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiBsb2FkZWQuc2l6ZX0gOiB7fSksXG4gICAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnXG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0LFxuICAnSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG5jb25zdCBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKGFzeW5jIChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufSwgJ0ZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSycpO1xuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIHJldHVybiBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyhkYXRhc2V0KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcyksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yKVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cmVzdWx0LCBmaWx0ZXJQcm9wcywgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWixPQUFBO0FBRUEsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBUUEsSUFBQWMsUUFBQSxHQUFBZCxPQUFBO0FBZ0NBLElBQUFlLE1BQUEsR0FBQWYsT0FBQTtBQWlDQSxJQUFBZ0Is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
|
|
5150
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJUYXNrIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwicmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0IiwidmlzdWFsQ2hhbm5lbCIsImluY29taW5nIiwiX3R5cGVvZjIiLCJmb3VuZCIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3IiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJyYW5nZSIsImNvbG9yUmFuZ2VDb25maWciLCJjb2xvclVJIiwiY3VzdG9tQnJlYWtzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTUiLCJzY2FsZSIsIlNDQUxFX1RZUEVTIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJlbmROYW1lIiwiX2FwcGx5VGltZUZpbHRlckVuZEZpIiwiYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lIiwiZ3B1Q2hhbm5lbCIsImdwdUVuZENoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY2IiwibmV3UHJvcCIsInBpY2tfIiwibWVyZ2VfIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY3Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImlzU2lkZUZpbHRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJnZXROZXdMYXllckdyb3VwIiwibmV3TGF5ZXJPcmRlciIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cFRvUmVtb3ZlIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwibGF5ZXJJZHNUb1JlbW92ZSIsImdldEZsYXRMYXllck9yZGVyIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBJZCIsImVudHJ5IiwibmV3R3JvdXBMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIiLCJuZXdMYXllckdyb3VwT3JkZXIiLCJzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsIm9yaWdpbkxheWVyR3JvdXBJZCIsImRlc3RpbmF0aW9uTGF5ZXJHcm91cElkIiwib3JpZ2luSW5kZXgiLCJkZXN0aW5hdGlvbkluZGV4IiwiYXJyYXlNb3ZlIiwiZGVzdEluZGV4IiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwiX3JlZjEiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsImdlbmVyYXRlSGFzaElkIiwiTEFZRVJfSURfTEVOR1RIIiwicGFyZW50R3JvdXAiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsImxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkIiwiaWR4SW5Hcm91cCIsImFycmF5SW5zZXJ0IiwidXBkYXRlZEdyb3VwIiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiX2FjdGlvbiRjb25maWcyIiwiX2FjdGlvbiRjb25maWczIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJlZmZlY3QiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJuZXdFZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJzZXRQcm9wcyIsImZpeEVmZmVjdE9yZGVyIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMCIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5leHRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwidGltZXN0YW1wIiwibmV3RWZmZWN0cyIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjEzIiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxNCIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJwcm92aWRlZEFuZ2xlIiwiYW5nbGUiLCJkZXJpdmVkRnJvbUFuZ2xlIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsInRleHRTaWRlIiwiQW5ub3RhdGlvbktpbmQiLCJURVhUIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE1IiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTYiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTciLCJjbG9uZURlZXAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTkiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMCIsIl9yZWYyMCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMCRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwiaXNWYWxpZE1lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjIxIiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjIiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJCb29sZWFuIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjMiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjQiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyNSIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMjciLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjgiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYyOSIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzEkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsImJvdW5kcyIsImZpbmRNYXBCb3VuZHMiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNSZ2JDb2xvciIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzIiLCJfcmVmMzMiLCJja2V5IiwiY29sIiwiX3JlZjM0IiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIlNldCIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsImZsYXRNYXAiLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiREVMQVlfVEFTSyIsImxvYWROZXh0RmlsZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJMT0FEX0ZJTEVfVEFTSyIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMzUiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYzNSRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiVU5XUkFQX1RBU0siLCJfcmVmMzYiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjM3IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYzOCIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmNDAiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmNDEiLCJza2V0Y2hlc0VuYWJsZWQiLCJlbmFibGVEcmF3T25NYXBTa2V0Y2hlcyIsIkRSQVdfUE9JTlQiLCJEUkFXX0xJTkVTVFJJTkciLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmNDIiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkyIiwiX3JlZjQyJGZlYXR1cmVzIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJzaGFwZSIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNDMiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsIm5leHRFZGl0b3IiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ0Iiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ1Iiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ2IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ3IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OCIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwicGFyc2VGaWVsZFZhbHVlIiwidmFsdWVBdCIsImpvaW4iLCJjb3B5Iiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmNDkiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsImdldE1hcHBlZFZhbHVlIiwiZmlsdGVyUHJvcHMiLCJtYXBwZWRWYWx1ZSIsInlpZWxkRm9yUGFpbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfeDQiLCJfcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX2NhbGxlZTQiLCJfcmVmNTAiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTEiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1MiIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjUzIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1NCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwicHJvY2Vzc0dlb2pzb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY1NSIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNTYiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwiY29uc29sZSIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY1NyIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY1OSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNjAiLCJhY2N1U3RhdGUiLCJfcmVmNjEiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY2MiIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7bG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUxheWVyRGF0YSxcbiAgZmluZERlZmF1bHRMYXllcixcbiAgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMsXG4gIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyxcbiAgZ2V0TmV3TGF5ZXJHcm91cCxcbiAgYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyLFxuICByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIsXG4gIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcixcbiAgZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIsXG4gIGdldEluZGV4RnJvbUxheWVyRW50cnlJZCxcbiAgdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcixcbiAgZ2V0RmxhdExheWVyT3JkZXIsXG4gIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyXG59IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFtcbiAgICAnZGF0YUlkJyxcbiAgICAnbmFtZScsXG4gICAgJ2ZpZWxkSWR4JyxcbiAgICAnZ3B1Q2hhbm5lbCcsXG4gICAgJ2VuZE5hbWUnLFxuICAgICdlbmRGaWVsZElkeCcsXG4gICAgJ2VuZE1hcHBlZFZhbHVlJyxcbiAgICAnZ3B1RW5kQ2hhbm5lbCdcbiAgXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/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/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBkYXRhc2V0LCAuLi5uZXdEYXRhc2V0c31cbiAgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgbGV0IG5ld1N0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzXG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIG5ld1N0YXRlLmZpbHRlcnMpIHtcbiAgICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFzZXRLZXkpO1xuICAgIGlmICh2YWx1ZUluZGV4ID49IDAgJiYgZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBvbmx5IHJlbW92ZSBvbmUgc3luY2VkIGRhdGFzZXQgZnJvbSB0aGUgZmlsdGVyXG4gICAgICBmaWx0ZXJzLnB1c2goX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUluZGV4IDwgMCkge1xuICAgICAgLy8gbGVhdmUgdGhlIGZpbHRlciBhcyBpc1xuICAgICAgZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGZpbHRlcnN9O1xuXG4gIHJldHVybiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwXG4gIH0pO1xuICBpZiAoIWxvYWRlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhIGxvYWRlZCBmcm9tICR7ZGF0YXNldC5tZXRhZGF0YT8uc291cmNlfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YXNldCxcbiAgICBkYXRhOiBsb2FkZWQuZGF0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIGV0YWc6IGxvYWRlZC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBsb2FkZWQubGFzdE1vZGlmaWVkLFxuICAgICAgLi4uKHR5cGVvZiBsb2FkZWQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogbG9hZGVkLnNpemV9IDoge30pLFxuICAgICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJ1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soZGF0YXNldCkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgc2l6ZTogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgPT09ICdudW1iZXInID8gbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXRhZzogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgPT09ICdzdHJpbmcnID8gbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdE1vZGlmaWVkOlxuICAgICAgICAgIHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgICByZWZyZXNoRGF0YXNldFByb2dyZXNzKGRhdGFJZCwgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApKVxuICAgIH0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IHJlZnJlc2hEYXRhc2V0U3VjY2VzcyhkYXRhSWQsIHJlc3VsdCksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiByZWZyZXNoRGF0YXNldEVycm9yKGRhdGFJZCwgZXJyb3IpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IHJlZnJlc2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgIT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoUHJvZ3Jlc3MgPT09IG5leHRQZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtyZWZyZXNoUHJvZ3Jlc3M6IG5leHRQZXJjZW50fSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZXNFcXVhbChjdXJyZW50OiB7bmFtZTogc3RyaW5nfVtdLCBpbmNvbWluZz86IHtuYW1lOiBzdHJpbmd9W10gfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghaW5jb21pbmc/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gaW5jb21pbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjdXJyZW50LmV2ZXJ5KChmaWVsZCwgaSkgPT4gZmllbGQubmFtZSA9PT0gaW5jb21pbmdbaV0ubmFtZSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHJlbW90ZSBzbmFwc2hvdCBjaGFuZ2VzIGNvbHVtbiBuYW1lcywgb2xkIGxheWVyIGZpZWxkSWR4IC8gZmlsdGVyIG5hbWVzXG4gKiBjYW4gcG9pbnQgYXQgdGhlIHdyb25nIGNvbHVtbi4gUmUtYmluZCBieSBuYW1lIGFuZCBkcm9wIGNvbmZpZ3MgdGhhdCBubyBsb25nZXIgZml0LlxuICovXG5mdW5jdGlvbiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgbmV4dExheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkTGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChsYXllcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYm91bmQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMsIGxheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICAgIGlmIChyZWJvdW5kPy5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChyZWJvdW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZExheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZXh0TGF5ZXJPcmRlciA9IHN0YXRlLmxheWVyT3JkZXI7XG4gIGxldCBuZXh0U3BsaXRNYXBzID0gc3RhdGUuc3BsaXRNYXBzO1xuICBkcm9wcGVkTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIG5leHRMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5leHRMYXllck9yZGVyLCBsYXllci5pZCk7XG4gICAgbmV4dFNwbGl0TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhuZXh0U3BsaXRNYXBzLCBsYXllcik7XG4gIH0pO1xuXG4gIGNvbnN0IG5leHRMYXllckRhdGEgPSBuZXh0TGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgY29uc3Qgb2xkSWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChvbGRMYXllciA9PiBvbGRMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIHJldHVybiBvbGRJZHggPj0gMCA/IHN0YXRlLmxheWVyRGF0YVtvbGRJZHhdIDoge307XG4gIH0pO1xuXG4gIGNvbnN0IGZpbHRlcnNGb3JEYXRhc2V0ID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IG90aGVyRmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcblxuICBjb25zdCB7dmFsaWRhdGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoXG4gICAgey4uLnN0YXRlLCBkYXRhc2V0cywgbGF5ZXJzOiBuZXh0TGF5ZXJzfSxcbiAgICBmaWx0ZXJzRm9yRGF0YXNldFxuICApO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXJzID0gWy4uLm90aGVyRmlsdGVycywgLi4udmFsaWRhdGVkXTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIG5leHRGaWx0ZXJzLFxuICAgIG5leHRMYXllcnNcbiAgKTtcblxuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBsYXllcnM6IG5leHRMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXh0TGF5ZXJEYXRhLFxuICAgIGxheWVyT3JkZXI6IG5leHRMYXllck9yZGVyLFxuICAgIHNwbGl0TWFwczogbmV4dFNwbGl0TWFwcyxcbiAgICBmaWx0ZXJzOiBuZXh0RmlsdGVyc1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZmluaXNoZWQgcmVtb3RlIHJlZnJlc2g6IGtlZXAgbGF5ZXJzLCByZS1ydW4gZmlsdGVycyBhbmQgbGF5ZXIgZGF0YS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJlc3VsdH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YVBhdGNoID0ge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZCxcbiAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgIC8vIEFsd2F5cyB3cml0ZSB2YWxpZGF0b3JzLiBBIDIwMCB0aGF0IG9taXRzIHRoZW0gbXVzdCBub3Qga2VlcCB0aGUgcHJldmlvdXNcbiAgICAvLyBFVGFnIG9yIGEgbGF0ZXIgMzA0IGNhbiBza2lwIGEgYm9keSB3ZSBubyBsb25nZXIgaGF2ZS5cbiAgICBldGFnOiByZXN1bHQuZXRhZyxcbiAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgLi4uKHR5cGVvZiByZXN1bHQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogcmVzdWx0LnNpemV9IDoge30pXG4gIH07XG5cbiAgY29uc3Qgc2NoZW1hVW5jaGFuZ2VkID0gZmllbGROYW1lc0VxdWFsKGRhdGFzZXQuZmllbGRzLCByZXN1bHQuZGF0YT8uZmllbGRzKTtcblxuICAvLyBBcHBseSB0aGUgc25hcHNob3QgdG8gdGhlIHRhYmxlIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUuIFByb2dyZXNzIG1heSBoYXZlXG4gIC8vIGNvcGllZCBpdCBvZmYgdGhlIG9iamVjdCB0aGF0IHN0YXJ0ZWQgdGhlIGZldGNoOyB0aGUgdGFzayBuZXZlciBtdXRhdGVzIGl0LlxuICBpZiAoIXJlc3VsdC5ub3RNb2RpZmllZCAmJiByZXN1bHQuZGF0YSkge1xuICAgIC8vIEtlcGxlclRhYmxlLnVwZGF0ZSBpcyBhc3luYyBzbyBEdWNrREIgY2FuIGF3YWl0IEFycm93IGNvbnZlcnNpb24uIFRoZVxuICAgIC8vIENTVi9HZW9KU09OIHBhdGggKGFuZCBLZXBsZXJUYWJsZS5pbXBvcnREYXRhKSBydW4gc3luY2hyb25vdXNseSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgYXdhaXQsIHNvIHRoZSBzdG9yZSB0YWJsZSBpcyB1cGRhdGVkIGJlZm9yZSB3ZSBjb3B5IGl0IGJlbG93LlxuICAgIHZvaWQgZGF0YXNldC51cGRhdGUocmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaGVkID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwgbWV0YWRhdGFQYXRjaCk7XG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiByZWZyZXNoZWRcbiAgfTtcblxuICBpZiAocmVzdWx0Lm5vdE1vZGlmaWVkIHx8ICFyZXN1bHQuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzXG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2NoZW1hVW5jaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShzdGF0ZSwgZGF0YUlkLCBkYXRhc2V0cyk7XG4gIH1cblxuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbmZ1bmN0aW9uIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHN0YXRlOiBWaXNTdGF0ZSwgZGF0YUlkOiBzdHJpbmcpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YXNldFJvd0xpc3QoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXVxuKTogcm93cyBpcyBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8ICFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3MpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGNvbHVtbi1vcmRlcmVkIHJvdyBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzOyBhIGxpc3Qgb2Ygcm93cyBpc1xuICAvLyBhbiBhcnJheSBvZiBhcnJheXMgb3IgYW4gYXJyYXkgb2YgZmllbGQtbmFtZSByZWNvcmRzLlxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzWzBdKSB8fCBpc1BsYWluT2JqZWN0KHJvd3NbMF0pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5Um93KHJvdzogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3csIGZpZWxkczogRmllbGRbXSk6IGFueVtdIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICByZXR1cm4gcm93Lmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCA/IHJvdyA6IG51bGw7XG4gIH1cbiAgaWYgKGlzUGxhaW5PYmplY3Qocm93KSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwgZmllbGQubmFtZSkgPyByZWNvcmRbZmllbGQubmFtZV0gOiBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YXNldFJvd3MoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3QgPSBpc0RhdGFzZXRSb3dMaXN0KHJvd3MpID8gcm93cyA6IFtyb3dzXTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJyYXlSb3cgPSB0b0FycmF5Um93KGxpc3RbaV0sIGZpZWxkcyk7XG4gICAgaWYgKCFhcnJheVJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWQucHVzaChhcnJheVJvdyk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQXBwZW5kIG9yIHVwc2VydCByb3dzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC4gS2VlcHMgbGF5ZXJzIGFuZCByZS1ydW5zIGZpbHRlcnMuXG4gKiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZCAoSU5TRVJUIC8gY29uY2F0IG5vdCBpbXBsZW1lbnRlZCkuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dzLCBvcHRpb25zfTogVmlzU3RhdGVBY3Rpb25zLkFkZFRvRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVEYXRhc2V0Um93cyhyb3dzLCBkYXRhc2V0LmZpZWxkcyk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGFwcGxpZWQgPSBvcHRpb25zPy51cHNlcnRCeVxuICAgID8gZGF0YXNldC51cHNlcnRSb3dzKG5vcm1hbGl6ZWQsIG9wdGlvbnMudXBzZXJ0QnkpXG4gICAgOiBkYXRhc2V0LmFwcGVuZFJvd3Mobm9ybWFsaXplZCk7XG4gIGlmICghYXBwbGllZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBEZWxldGUgcm93cyBieSBpbmRleCBvciBieSBmaWVsZCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuXG4gKiBLZWVwcyBsYXllcnMuIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dJbmRleGVzLCBieUZpZWxkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZyb21EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlcyA9IGJ5RmllbGRcbiAgICA/IGRhdGFzZXQuZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzKGJ5RmllbGQuZmllbGQsIHRvQXJyYXkoYnlGaWVsZC52YWx1ZXMpKVxuICAgIDogdG9BcnJheShyb3dJbmRleGVzID8/IFtdKTtcbiAgaWYgKCFpbmRleGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWRhdGFzZXQucmVtb3ZlUm93cyhpbmRleGVzKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBmYWlsZWQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaCB3aXRob3V0IGRyb3BwaW5nIGV4aXN0aW5nIHJvd3MuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZXJyb3J9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgICAgICByZWZyZXNoU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICByZWZyZXNoRXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXJzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+XG4gICAgICB0bC5maWVsZCAmJiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdXG4gICAgICAgID8gey4uLnRsLCBmaWVsZDogey4uLnRsLmZpZWxkLCBuYW1lOiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdfX1cbiAgICAgICAgOiB0bFxuICAgICk7XG4gICAgaWYgKHRleHRMYWJlbC5zb21lKCh0bCwgaSkgPT4gdGwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaV0pKSB7XG4gICAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSB0ZXh0TGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuYW1lKSA+IC0xKTtcblxuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgU2V0KG5ld1RhYmxlLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbHVtbiBpcyBnb25lOiBkcm9wIGEgc2luZ2xlLWRhdGFzZXQgZmlsdGVyLCBzcGxpY2UgaXQgb3V0IG9mIGEgc3luY2VkIG9uZVxuICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYnJ1c2ggZmlsdGVycyBjYXJyeSBhIHNlY29uZCB5LWF4aXMgZmllbGQ7IGZvbGxvdyBhIHJlbmFtZSB0aGVyZSB0b29cbiAgICAgIGNvbnN0IHlBeGlzID1cbiAgICAgICAgdXBkYXRlZC55QXhpcz8ubmFtZSAmJlxuICAgICAgICAocmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdXG4gICAgICAgICAgPyB7Li4udXBkYXRlZC55QXhpcywgbmFtZTogcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdfVxuICAgICAgICAgIDogbmV3RmllbGRzQnlOYW1lLmhhcyh1cGRhdGVkLnlBeGlzLm5hbWUpXG4gICAgICAgICAgPyB1cGRhdGVkLnlBeGlzXG4gICAgICAgICAgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gcmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gMy4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgKGdwdUZpbHRlciAvIGZpbHRlclJlY29yZCAvIGZpbHRlcmVkSW5kZXgpXG4gIG5ld1RhYmxlLmZpbHRlclRhYmxlKFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKSxcbiAgICB7fVxuICApO1xuXG4gIC8vIDQuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBBcnJheS5mcm9tKGZpbGVzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkOiBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLCBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+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+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQVdBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQWdDQSxJQUFBYyxNQUFBLEdBQUFkLE9BQUE7QUFrQ0EsSUFBQWUsWUFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLFVBQUEsR0FBQWhCLE9BQUE7QUFtQ0EsSUFBQWlCLE9BQUEsR0FBQWpCLE9BQUE7QUFDQSxJQUFBa0IsZ0JBQUEsR0FBQWxCLE9BQUE7QUFVQSxJQUFBbUIsY0FBQSxHQUFBbkIsT0FBQTtBQUNBLElBQUFvQixlQUFBLEdBQUFwQixPQUFBO0FBVUEsSUFBQXFCLFFBQUEsR0FBQW5CLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBc0IsV0FBQSxHQUFBdEIsT0FBQTtB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
|