@kepler.gl/reducers 3.3.0-alpha.12 → 3.3.0-alpha.14

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.
@@ -5,7 +5,7 @@ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
8
+ exports.addChartUpdater = exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
9
9
  exports.addDefaultLayers = addDefaultLayers;
10
10
  exports.addDefaultTooltips = addDefaultTooltips;
11
11
  exports.addLayerUpdater = exports.addLayerToLayerGroupUpdater = exports.addLayerGroupUpdater = exports.addFilterUpdater = exports.addEffectUpdater = void 0;
@@ -20,6 +20,7 @@ exports.copyTableColumnUpdater = copyTableColumnUpdater;
20
20
  exports.defaultInteractionConfig = exports.createOrUpdateFilterUpdater = exports.createNewDatasetSuccessUpdater = void 0;
21
21
  exports.deleteFeatureUpdater = deleteFeatureUpdater;
22
22
  exports.duplicateLayerUpdater = exports.duplicateAnnotationUpdater = void 0;
23
+ exports.extractDataFromFeatureUpdater = extractDataFromFeatureUpdater;
23
24
  exports.initialFileLoadingProgress = initialFileLoadingProgress;
24
25
  exports.interactionConfigChangeUpdater = interactionConfigChangeUpdater;
25
26
  exports.isFilterAnimationConfig = isFilterAnimationConfig;
@@ -46,13 +47,14 @@ exports.nextFileBatchUpdater = exports.mouseMoveUpdater = exports.mapClickUpdate
46
47
  exports.parseProgress = parseProgress;
47
48
  exports.pinTableColumnUpdater = pinTableColumnUpdater;
48
49
  exports.prepareStateForDatasetReplace = prepareStateForDatasetReplace;
50
+ exports.preservedOrderWithParked = preservedOrderWithParked;
49
51
  exports.processFileContentUpdater = processFileContentUpdater;
50
52
  exports.receiveMapConfigUpdater = void 0;
51
53
  exports.refreshDatasetErrorUpdater = refreshDatasetErrorUpdater;
52
54
  exports.refreshDatasetProgressUpdater = refreshDatasetProgressUpdater;
53
55
  exports.refreshDatasetSuccessUpdater = refreshDatasetSuccessUpdater;
54
56
  exports.refreshDatasetUpdater = refreshDatasetUpdater;
55
- exports.removeAnnotationUpdater = void 0;
57
+ exports.removeChartUpdater = exports.removeAnnotationUpdater = void 0;
56
58
  exports.removeDatasetUpdater = removeDatasetUpdater;
57
59
  exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
58
60
  exports.removeFromDatasetUpdater = removeFromDatasetUpdater;
@@ -88,7 +90,7 @@ exports.toggleEditorVisibilityUpdater = toggleEditorVisibilityUpdater;
88
90
  exports.toggleSplitMapUpdater = exports.toggleLayerForMapUpdater = exports.toggleLayerAnimationUpdater = exports.toggleLayerAnimationControlUpdater = exports.toggleFilterFeatureUpdater = exports.toggleFilterAnimationUpdater = void 0;
89
91
  exports.updateAllLayerDomainData = updateAllLayerDomainData;
90
92
  exports.updateAnimationDomain = updateAnimationDomain;
91
- exports.updateAnnotationUpdater = void 0;
93
+ exports.updateChartUpdater = exports.updateAnnotationUpdater = void 0;
92
94
  exports.updateDatasetPropsUpdater = updateDatasetPropsUpdater;
93
95
  exports.updateDatasetUpdater = updateDatasetUpdater;
94
96
  exports.updateEffectUpdater = void 0;
@@ -273,6 +275,9 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
273
275
  // effects
274
276
  effects: [],
275
277
  effectOrder: [],
278
+ // charts (enabled by default; gated by enableChartsPanel)
279
+ charts: [],
280
+ chartsToBeMerged: [],
276
281
  // annotations
277
282
  annotations: [],
278
283
  annotationsToBeMerged: [],
@@ -381,9 +386,9 @@ function applyLayerConfigUpdater(state, action) {
381
386
  var oldLayerId = action.oldLayerId,
382
387
  newLayerConfig = action.newLayerConfig,
383
388
  layerIndex = action.layerIndex;
384
- var newParsedLayer =
385
- // will move visualChannels to the config prop
386
- (0, _visStateMerger.parseLayerConfig)(state.schema, newLayerConfig);
389
+ // Saved configs have a visualChannels sibling; parsed/editor JSON folds those
390
+ // fields into config. Re-parsing the latter drops colorField and resets the scale.
391
+ var newParsedLayer = (0, _visStateMerger.isSavedLayerConfigV1)(newLayerConfig) ? (0, _visStateMerger.parseLayerConfig)(state.schema, newLayerConfig) : newLayerConfig;
387
392
  var oldLayer = state.layers.find(function (l) {
388
393
  return l.id === oldLayerId;
389
394
  });
@@ -1055,6 +1060,20 @@ function layerVisConfigChangeUpdater(state, action) {
1055
1060
  var newLayer = oldLayer.updateLayerConfig({
1056
1061
  visConfig: newVisConfig
1057
1062
  });
1063
+
1064
+ // Jenks breaks depend on the number of colors. Recalculate the domain when
1065
+ // the color range of a Jenks channel changes.
1066
+ if (oldLayer.config.dataId) {
1067
+ var dataset = state.datasets[oldLayer.config.dataId];
1068
+ if (dataset) {
1069
+ Object.keys(newLayer.visualChannels).forEach(function (channelKey) {
1070
+ var channel = newLayer.visualChannels[channelKey];
1071
+ if (channel !== null && channel !== void 0 && channel.scale && newLayer.config[channel.scale] === _constants.SCALE_TYPES.jenks && channel.range && Object.prototype.hasOwnProperty.call(action.newVisConfig, channel.range)) {
1072
+ newLayer.updateLayerVisualChannel(dataset, channelKey);
1073
+ }
1074
+ });
1075
+ }
1076
+ }
1058
1077
  var nextState = state;
1059
1078
 
1060
1079
  // Exclusive bitmap editing: when editBounds is turned on for one bitmap layer,
@@ -1776,7 +1795,9 @@ function removeLayerUpdater(state, _ref9) {
1776
1795
  splitMaps: (0, _utils.removeLayerFromSplitMaps)(state.splitMaps, layerToRemove)
1777
1796
  // TODO: update filters, create helper to remove layer form filter (remove layerid and dataid) if mapped
1778
1797
  });
1779
- return updateAnimationDomain(newState);
1798
+ return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
1799
+ return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
1800
+ }));
1780
1801
  }
1781
1802
 
1782
1803
  /**
@@ -2227,16 +2248,169 @@ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpd
2227
2248
  effectOrder: effectOrder
2228
2249
  });
2229
2250
  };
2251
+ function isLayerChartConfig(chart) {
2252
+ return chart.type === 'layerChart';
2253
+ }
2254
+ function mergeChartConfig(chart, props) {
2255
+ return _objectSpread(_objectSpread(_objectSpread({}, chart), props), {}, {
2256
+ display: _objectSpread(_objectSpread({}, chart.display), props.display || {}),
2257
+ chartDisplay: _objectSpread(_objectSpread({}, chart.chartDisplay), props.chartDisplay || {})
2258
+ });
2259
+ }
2260
+ function axisFieldIfPresent(axis, fieldNames) {
2261
+ var _axis$field;
2262
+ if (!(axis !== null && axis !== void 0 && (_axis$field = axis.field) !== null && _axis$field !== void 0 && _axis$field.name) || fieldNames.has(axis.field.name)) {
2263
+ return axis;
2264
+ }
2265
+ return _objectSpread(_objectSpread({}, axis), {}, {
2266
+ field: null,
2267
+ title: null
2268
+ });
2269
+ }
2270
+ function dropMissingChartFields(chart, dataset) {
2271
+ var fieldNames = new Set(((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).map(function (field) {
2272
+ return field.name;
2273
+ }));
2274
+ var next = chart;
2275
+ return mergeChartConfig(chart, {
2276
+ xAxis: axisFieldIfPresent(next.xAxis, fieldNames),
2277
+ yAxis: axisFieldIfPresent(next.yAxis, fieldNames),
2278
+ axis: axisFieldIfPresent(next.axis, fieldNames),
2279
+ groupBy: axisFieldIfPresent(next.groupBy, fieldNames),
2280
+ value: axisFieldIfPresent(next.value, fieldNames)
2281
+ });
2282
+ }
2283
+ function removeChartsAndFilters(state, shouldRemove) {
2284
+ var charts = state.charts || [];
2285
+ var removed = charts.filter(shouldRemove);
2286
+ if (!removed.length) {
2287
+ return state;
2288
+ }
2289
+ var removedIds = new Set(removed.map(function (chart) {
2290
+ return chart.id;
2291
+ }));
2292
+ var filterIds = new Set(removed.flatMap(function (chart) {
2293
+ var _chart$crossFilter;
2294
+ var id = (_chart$crossFilter = chart.crossFilter) === null || _chart$crossFilter === void 0 ? void 0 : _chart$crossFilter.filterId;
2295
+ return id ? [id, "".concat(id, "-x"), "".concat(id, "-y")] : [];
2296
+ }));
2297
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2298
+ charts: charts.filter(function (chart) {
2299
+ return !removedIds.has(chart.id);
2300
+ })
2301
+ });
2302
+ if (filterIds.size) {
2303
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2304
+ return filterIds.has(filter.id) ? removeFilterUpdater(accu, {
2305
+ idx: idx
2306
+ }) : accu;
2307
+ }, nextState);
2308
+ }
2309
+ return nextState;
2310
+ }
2311
+
2312
+ /**
2313
+ * Add a chart
2314
+ * @memberof visStateUpdaters
2315
+ * @public
2316
+ */
2317
+ var addChartUpdater = exports.addChartUpdater = function addChartUpdater(state, _ref13) {
2318
+ var _chart$display$isConf, _chart$display;
2319
+ var chart = _ref13.chart;
2320
+ if (!(chart !== null && chart !== void 0 && chart.id)) {
2321
+ return state;
2322
+ }
2323
+ if ((state.charts || []).some(function (existing) {
2324
+ return existing.id === chart.id;
2325
+ })) {
2326
+ return state;
2327
+ }
2328
+ return _objectSpread(_objectSpread({}, state), {}, {
2329
+ charts: [].concat((0, _toConsumableArray2["default"])((state.charts || []).map(function (existing) {
2330
+ return _objectSpread(_objectSpread({}, existing), {}, {
2331
+ display: _objectSpread(_objectSpread({}, existing.display), {}, {
2332
+ isConfigActive: false
2333
+ })
2334
+ });
2335
+ })), [_objectSpread(_objectSpread({}, chart), {}, {
2336
+ display: _objectSpread(_objectSpread({}, chart.display), {}, {
2337
+ isConfigActive: (_chart$display$isConf = (_chart$display = chart.display) === null || _chart$display === void 0 ? void 0 : _chart$display.isConfigActive) !== null && _chart$display$isConf !== void 0 ? _chart$display$isConf : false
2338
+ })
2339
+ })])
2340
+ });
2341
+ };
2342
+
2343
+ /**
2344
+ * Update a chart
2345
+ * @memberof visStateUpdaters
2346
+ * @public
2347
+ */
2348
+ var updateChartUpdater = exports.updateChartUpdater = function updateChartUpdater(state, _ref14) {
2349
+ var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
2350
+ var id = _ref14.id,
2351
+ props = _ref14.props;
2352
+ var idx = (state.charts || []).findIndex(function (chart) {
2353
+ return chart.id === id;
2354
+ });
2355
+ if (idx < 0) {
2356
+ return state;
2357
+ }
2358
+ var prev = state.charts[idx];
2359
+ var dataIdChanged = typeof props.dataId === 'string' && props.dataId !== prev.dataId;
2360
+ var layerIdChanged = isLayerChartConfig(prev) && typeof props.layerId === 'string' && props.layerId !== prev.layerId;
2361
+ var next = mergeChartConfig(prev, props);
2362
+ if (dataIdChanged || layerIdChanged) {
2363
+ var _next$crossFilter;
2364
+ var dataId = next.dataId || undefined;
2365
+ next = dropMissingChartFields(next, dataId ? state.datasets[dataId] : undefined);
2366
+ if ((_next$crossFilter = next.crossFilter) !== null && _next$crossFilter !== void 0 && _next$crossFilter.enabled) {
2367
+ next = mergeChartConfig(next, {
2368
+ crossFilter: _objectSpread(_objectSpread({}, next.crossFilter), {}, {
2369
+ enabled: false,
2370
+ value: {},
2371
+ fieldNames: {}
2372
+ })
2373
+ });
2374
+ }
2375
+ }
2376
+ var charts = (0, _toConsumableArray2["default"])(state.charts);
2377
+ charts[idx] = next;
2378
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2379
+ charts: charts
2380
+ });
2381
+ var filterId = ((_next$crossFilter2 = next.crossFilter) === null || _next$crossFilter2 === void 0 ? void 0 : _next$crossFilter2.filterId) || ((_prev$crossFilter = prev.crossFilter) === null || _prev$crossFilter === void 0 ? void 0 : _prev$crossFilter.filterId);
2382
+ if ((_prev$crossFilter2 = prev.crossFilter) !== null && _prev$crossFilter2 !== void 0 && _prev$crossFilter2.enabled && !((_next$crossFilter3 = next.crossFilter) !== null && _next$crossFilter3 !== void 0 && _next$crossFilter3.enabled) && filterId) {
2383
+ var ownedFilterIds = new Set([filterId, "".concat(filterId, "-x"), "".concat(filterId, "-y")]);
2384
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2385
+ return ownedFilterIds.has(filter.id) ? removeFilterUpdater(accu, {
2386
+ idx: idx
2387
+ }) : accu;
2388
+ }, nextState);
2389
+ }
2390
+ return nextState;
2391
+ };
2392
+
2393
+ /**
2394
+ * Remove a chart and any cross-filter it owns
2395
+ * @memberof visStateUpdaters
2396
+ * @public
2397
+ */
2398
+ var removeChartUpdater = exports.removeChartUpdater = function removeChartUpdater(state, _ref15) {
2399
+ var id = _ref15.id;
2400
+ return removeChartsAndFilters(state, function (chart) {
2401
+ return chart.id === id;
2402
+ });
2403
+ };
2230
2404
 
2231
2405
  // ANNOTATION UPDATERS
2232
2406
 
2233
2407
  function makeNewAnnotation(config) {
2234
- 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;
2408
+ var _config$kind, _ref16, _config$textSide, _ref17, _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;
2235
2409
  var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : _constants.INITIAL_ANNOTATION_KIND;
2236
2410
  var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
2237
2411
  var derivedFromAngle = providedAngle != null ? (0, _constants.textPlacementFromAngle)(providedAngle) : undefined;
2238
- 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;
2239
- 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;
2412
+ var textSide = (_ref16 = (_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 && _ref16 !== void 0 ? _ref16 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_SIDE;
2413
+ var textVerticalPosition = (_ref17 = (_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 && _ref17 !== void 0 ? _ref17 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2240
2414
  var base = _objectSpread(_objectSpread(_objectSpread({
2241
2415
  id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : (0, _commonUtils.generateHashId)(6),
2242
2416
  kind: kind,
@@ -2305,8 +2479,8 @@ var addAnnotationUpdater = exports.addAnnotationUpdater = function addAnnotation
2305
2479
  * @memberof visStateUpdaters
2306
2480
  * @public
2307
2481
  */
2308
- var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
2309
- var id = _ref15.id;
2482
+ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref18) {
2483
+ var id = _ref18.id;
2310
2484
  return _objectSpread(_objectSpread({}, state), {}, {
2311
2485
  annotations: state.annotations.filter(function (a) {
2312
2486
  return a.id !== id;
@@ -2321,9 +2495,9 @@ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeA
2321
2495
  * @memberof visStateUpdaters
2322
2496
  * @public
2323
2497
  */
2324
- var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
2325
- var id = _ref16.id,
2326
- config = _ref16.config;
2498
+ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref19) {
2499
+ var id = _ref19.id,
2500
+ config = _ref19.config;
2327
2501
  var idx = state.annotations.findIndex(function (a) {
2328
2502
  return a.id === id;
2329
2503
  });
@@ -2350,8 +2524,8 @@ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateA
2350
2524
  * @memberof visStateUpdaters
2351
2525
  * @public
2352
2526
  */
2353
- var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
2354
- var id = _ref17.id;
2527
+ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref20) {
2528
+ var id = _ref20.id;
2355
2529
  var original = state.annotations.find(function (a) {
2356
2530
  return a.id === id;
2357
2531
  });
@@ -2375,9 +2549,9 @@ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function d
2375
2549
  * @memberof visStateUpdaters
2376
2550
  * @public
2377
2551
  */
2378
- var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
2379
- var id = _ref18.id,
2380
- isEditingText = _ref18.isEditingText;
2552
+ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref21) {
2553
+ var id = _ref21.id,
2554
+ isEditingText = _ref21.isEditingText;
2381
2555
  if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2382
2556
  return state;
2383
2557
  }
@@ -2444,12 +2618,20 @@ function removeDatasetUpdater(state, action) {
2444
2618
  newState = _objectSpread(_objectSpread({}, newState), {}, {
2445
2619
  filters: filters
2446
2620
  });
2447
- return removeDatasetFromInteractionConfig(newState, {
2621
+ return removeChartsAndFilters(removeDatasetFromInteractionConfig(newState, {
2448
2622
  dataId: datasetKey
2623
+ }), function (chart) {
2624
+ if (chart.dataId === datasetKey) {
2625
+ return true;
2626
+ }
2627
+ if (isLayerChartConfig(chart)) {
2628
+ return layersToRemove.includes(chart.layerId);
2629
+ }
2630
+ return false;
2449
2631
  });
2450
2632
  }
2451
- function removeDatasetFromInteractionConfig(state, _ref19) {
2452
- var dataId = _ref19.dataId;
2633
+ function removeDatasetFromInteractionConfig(state, _ref22) {
2634
+ var dataId = _ref22.dataId;
2453
2635
  var interactionConfig = state.interactionConfig;
2454
2636
  var _interactionConfig = interactionConfig,
2455
2637
  tooltip = _interactionConfig.tooltip;
@@ -2534,12 +2716,12 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
2534
2716
  * @memberof visStateUpdaters
2535
2717
  * @public
2536
2718
  */
2537
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
2538
- var _ref20$payload = _ref20.payload,
2539
- _ref20$payload$config = _ref20$payload.config,
2540
- config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
2541
- _ref20$payload$option = _ref20$payload.options,
2542
- options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
2719
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
2720
+ var _ref23$payload = _ref23.payload,
2721
+ _ref23$payload$config = _ref23$payload.config,
2722
+ config = _ref23$payload$config === void 0 ? {} : _ref23$payload$config,
2723
+ _ref23$payload$option = _ref23$payload.options,
2724
+ options = _ref23$payload$option === void 0 ? {} : _ref23$payload$option;
2543
2725
  if (!config.visState) {
2544
2726
  return state;
2545
2727
  }
@@ -2644,8 +2826,8 @@ var mapClickUpdater = exports.mapClickUpdater = function mapClickUpdater(state,
2644
2826
  * @memberof visStateUpdaters
2645
2827
  * @public
2646
2828
  */
2647
- var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
2648
- var evt = _ref21.evt;
2829
+ var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref24) {
2830
+ var evt = _ref24.evt;
2649
2831
  if (Object.values(state.interactionConfig).some(function (config) {
2650
2832
  return config.enabled;
2651
2833
  })) {
@@ -2679,9 +2861,9 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
2679
2861
  * @memberof visStateUpdaters
2680
2862
  * @public
2681
2863
  */
2682
- var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
2683
- var mapIndex = _ref22.mapIndex,
2684
- layerId = _ref22.layerId;
2864
+ var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref25) {
2865
+ var mapIndex = _ref25.mapIndex,
2866
+ layerId = _ref25.layerId;
2685
2867
  var splitMaps = state.splitMaps;
2686
2868
  return _objectSpread(_objectSpread({}, state), {}, {
2687
2869
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2752,7 +2934,7 @@ function _hydrateExternallyHostedProtoDataset() {
2752
2934
  }
2753
2935
  var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromise(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
2754
2936
  var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/function () {
2755
- var _ref23 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
2937
+ var _ref26 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
2756
2938
  return _regenerator["default"].wrap(function _callee$(_context) {
2757
2939
  while (1) switch (_context.prev = _context.next) {
2758
2940
  case 0:
@@ -2764,7 +2946,7 @@ var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/functi
2764
2946
  }, _callee);
2765
2947
  }));
2766
2948
  return function (_x2) {
2767
- return _ref23.apply(this, arguments);
2949
+ return _ref26.apply(this, arguments);
2768
2950
  };
2769
2951
  }(), 'FAIL_CREATE_DATASET_TASK');
2770
2952
  function createNewDataEntryTask(dataset, datasets) {
@@ -2785,12 +2967,12 @@ function refreshExternallyHostedTable(_x3) {
2785
2967
  return _refreshExternallyHostedTable.apply(this, arguments);
2786
2968
  }
2787
2969
  function _refreshExternallyHostedTable() {
2788
- _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref24) {
2970
+ _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref27) {
2789
2971
  var metadata, onProgress;
2790
2972
  return _regenerator["default"].wrap(function _callee3$(_context3) {
2791
2973
  while (1) switch (_context3.prev = _context3.next) {
2792
2974
  case 0:
2793
- metadata = _ref24.arg, onProgress = _ref24.onProgress;
2975
+ metadata = _ref27.arg, onProgress = _ref27.onProgress;
2794
2976
  return _context3.abrupt("return", (0, _processors.loadExternallyHostedDataset)(_objectSpread(_objectSpread({}, metadata), {}, {
2795
2977
  onProgress: onProgress,
2796
2978
  bypassCache: true
@@ -2811,9 +2993,9 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithPr
2811
2993
  * @memberof visStateUpdaters
2812
2994
  * @public
2813
2995
  */
2814
- function refreshDatasetUpdater(state, _ref25) {
2996
+ function refreshDatasetUpdater(state, _ref28) {
2815
2997
  var _dataset$metadata2, _dataset$metadata3;
2816
- var dataId = _ref25.dataId;
2998
+ var dataId = _ref28.dataId;
2817
2999
  var dataset = state.datasets[dataId];
2818
3000
  if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
2819
3001
  return state;
@@ -2852,10 +3034,10 @@ function refreshDatasetUpdater(state, _ref25) {
2852
3034
  * @memberof visStateUpdaters
2853
3035
  * @public
2854
3036
  */
2855
- function refreshDatasetProgressUpdater(state, _ref26) {
3037
+ function refreshDatasetProgressUpdater(state, _ref29) {
2856
3038
  var _dataset$metadata4, _dataset$metadata5;
2857
- var dataId = _ref26.dataId,
2858
- percent = _ref26.percent;
3039
+ var dataId = _ref29.dataId,
3040
+ percent = _ref29.percent;
2859
3041
  var dataset = state.datasets[dataId];
2860
3042
  if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
2861
3043
  return state;
@@ -2945,10 +3127,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
2945
3127
  * @memberof visStateUpdaters
2946
3128
  * @public
2947
3129
  */
2948
- function refreshDatasetSuccessUpdater(state, _ref27) {
3130
+ function refreshDatasetSuccessUpdater(state, _ref30) {
2949
3131
  var _result$data;
2950
- var dataId = _ref27.dataId,
2951
- result = _ref27.result;
3132
+ var dataId = _ref30.dataId,
3133
+ result = _ref30.result;
2952
3134
  var dataset = state.datasets[dataId];
2953
3135
  if (!dataset) {
2954
3136
  return state;
@@ -3042,10 +3224,10 @@ function normalizeDatasetRows(rows, fields) {
3042
3224
  * @memberof visStateUpdaters
3043
3225
  * @public
3044
3226
  */
3045
- function addToDatasetUpdater(state, _ref28) {
3046
- var dataId = _ref28.dataId,
3047
- rows = _ref28.rows,
3048
- options = _ref28.options;
3227
+ function addToDatasetUpdater(state, _ref31) {
3228
+ var dataId = _ref31.dataId,
3229
+ rows = _ref31.rows,
3230
+ options = _ref31.options;
3049
3231
  var dataset = state.datasets[dataId];
3050
3232
  if (!dataset) {
3051
3233
  return state;
@@ -3070,10 +3252,10 @@ function addToDatasetUpdater(state, _ref28) {
3070
3252
  * @memberof visStateUpdaters
3071
3253
  * @public
3072
3254
  */
3073
- function removeFromDatasetUpdater(state, _ref29) {
3074
- var dataId = _ref29.dataId,
3075
- rowIndexes = _ref29.rowIndexes,
3076
- byField = _ref29.byField;
3255
+ function removeFromDatasetUpdater(state, _ref32) {
3256
+ var dataId = _ref32.dataId,
3257
+ rowIndexes = _ref32.rowIndexes,
3258
+ byField = _ref32.byField;
3077
3259
  var dataset = state.datasets[dataId];
3078
3260
  if (!dataset) {
3079
3261
  return state;
@@ -3096,9 +3278,9 @@ function removeFromDatasetUpdater(state, _ref29) {
3096
3278
  * @memberof visStateUpdaters
3097
3279
  * @public
3098
3280
  */
3099
- function refreshDatasetErrorUpdater(state, _ref30) {
3100
- var dataId = _ref30.dataId,
3101
- error = _ref30.error;
3281
+ function refreshDatasetErrorUpdater(state, _ref33) {
3282
+ var dataId = _ref33.dataId,
3283
+ error = _ref33.error;
3102
3284
  var dataset = state.datasets[dataId];
3103
3285
  if (!dataset) {
3104
3286
  return state;
@@ -3138,10 +3320,10 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
3138
3320
  }
3139
3321
  var createDatasetTasks = [];
3140
3322
  var notificationTasks = [];
3141
- datasets.forEach(function (_ref31, datasetIndex) {
3142
- var _ref31$info = _ref31.info,
3143
- info = _ref31$info === void 0 ? {} : _ref31$info,
3144
- rest = (0, _objectWithoutProperties2["default"])(_ref31, _excluded2);
3323
+ datasets.forEach(function (_ref34, datasetIndex) {
3324
+ var _ref34$info = _ref34.info,
3325
+ info = _ref34$info === void 0 ? {} : _ref34$info,
3326
+ rest = (0, _objectWithoutProperties2["default"])(_ref34, _excluded2);
3145
3327
  var task = createNewDataEntryTask(_objectSpread({
3146
3328
  info: info
3147
3329
  }, rest), state.datasets);
@@ -3289,8 +3471,14 @@ function postMergeUpdater(mergedState, postMergerPayload) {
3289
3471
  newLayers = mergedState.layers.filter(function (l) {
3290
3472
  return l.config.dataId && newDataIds.includes(l.config.dataId);
3291
3473
  });
3474
+ // a layer already in a panel was merged from split maps, which decide the panels showing it
3475
+ var layersNotInSplitMaps = newLayers.filter(function (l) {
3476
+ return !mergedState.splitMaps.some(function (sm) {
3477
+ return l.id in sm.layers;
3478
+ });
3479
+ });
3292
3480
  mergedState = _objectSpread(_objectSpread({}, mergedState), {}, {
3293
- splitMaps: (0, _utils.addNewLayersToSplitMap)(mergedState.splitMaps, newLayers)
3481
+ splitMaps: (0, _utils.addNewLayersToSplitMap)(mergedState.splitMaps, layersNotInSplitMaps)
3294
3482
  });
3295
3483
  }
3296
3484
  mergedState = (0, _layerUtils.mergeLayerVisConfigForNewDatasets)(mergedState, layerVisConfigFromAddDataOptions(options), newDataIds);
@@ -3439,10 +3627,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3439
3627
  // follow renamed columns
3440
3628
  var columnsPatch = {};
3441
3629
  var columnsChanged = false;
3442
- Object.entries(layer.config.columns || {}).forEach(function (_ref32) {
3443
- var _ref33 = (0, _slicedToArray2["default"])(_ref32, 2),
3444
- ckey = _ref33[0],
3445
- col = _ref33[1];
3630
+ Object.entries(layer.config.columns || {}).forEach(function (_ref35) {
3631
+ var _ref36 = (0, _slicedToArray2["default"])(_ref35, 2),
3632
+ ckey = _ref36[0],
3633
+ col = _ref36[1];
3446
3634
  if (col !== null && col !== void 0 && col.value && renames[col.value]) {
3447
3635
  columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
3448
3636
  value: renames[col.value]
@@ -3455,8 +3643,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3455
3643
  }
3456
3644
 
3457
3645
  // follow renamed visual-channel fields (colorField, sizeField, ...)
3458
- Object.values(layer.visualChannels).forEach(function (_ref34) {
3459
- var field = _ref34.field;
3646
+ Object.values(layer.visualChannels).forEach(function (_ref37) {
3647
+ var field = _ref37.field;
3460
3648
  var fieldConfig = layer.config[field];
3461
3649
  if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
3462
3650
  configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
@@ -3684,12 +3872,18 @@ var loadFilesUpdater = exports.loadFilesUpdater = function loadFilesUpdater(stat
3684
3872
  if (!files.length) {
3685
3873
  return state;
3686
3874
  }
3687
- var fileLoadingProgress = Array.from(files).reduce(function (accu, f, i) {
3875
+ var companionFiles = Array.from(files);
3876
+ var filesToLoad = (0, _processors.getFilesToParse)(companionFiles);
3877
+ if (!filesToLoad.length) {
3878
+ return state;
3879
+ }
3880
+ var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
3688
3881
  return (0, _composerHelpers.merge_)(initialFileLoadingProgress(f, i))(accu);
3689
3882
  }, {});
3690
3883
  var fileLoading = {
3691
3884
  fileCache: [],
3692
- filesToLoad: files,
3885
+ filesToLoad: filesToLoad,
3886
+ companionFiles: companionFiles,
3693
3887
  onFinish: onFinish
3694
3888
  };
3695
3889
  var nextState = (0, _composerHelpers.merge_)({
@@ -3759,16 +3953,18 @@ function loadNextFileUpdater(state) {
3759
3953
  });
3760
3954
  var loaders = state.loaders,
3761
3955
  loadOptions = state.loadOptions;
3762
- return (0, _tasks.withTask)(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions));
3956
+ return (0, _tasks.withTask)(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions, nextState.fileLoading ? nextState.fileLoading.companionFiles : undefined));
3763
3957
  }
3764
3958
  function makeLoadFileTask(file, fileCache) {
3765
3959
  var loaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
3766
3960
  var loadOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
3961
+ var companionFiles = arguments.length > 4 ? arguments[4] : undefined;
3767
3962
  return (0, _tasks.LOAD_FILE_TASK)({
3768
3963
  file: file,
3769
3964
  fileCache: fileCache,
3770
3965
  loaders: loaders,
3771
- loadOptions: loadOptions
3966
+ loadOptions: loadOptions,
3967
+ companionFiles: companionFiles
3772
3968
  }).bimap(
3773
3969
  // prettier ignore
3774
3970
  // success
@@ -3838,14 +4034,14 @@ function parseProgress() {
3838
4034
  * @memberof visStateUpdaters
3839
4035
  * @public
3840
4036
  */
3841
- var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
4037
+ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref38) {
3842
4038
  var _accumulated$data;
3843
- var _ref35$payload = _ref35.payload,
3844
- gen = _ref35$payload.gen,
3845
- fileName = _ref35$payload.fileName,
3846
- progress = _ref35$payload.progress,
3847
- accumulated = _ref35$payload.accumulated,
3848
- onFinish = _ref35$payload.onFinish;
4039
+ var _ref38$payload = _ref38.payload,
4040
+ gen = _ref38$payload.gen,
4041
+ fileName = _ref38$payload.fileName,
4042
+ progress = _ref38$payload.progress,
4043
+ accumulated = _ref38$payload.accumulated,
4044
+ onFinish = _ref38$payload.onFinish;
3849
4045
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3850
4046
  fileName: fileName,
3851
4047
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -3862,9 +4058,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3862
4058
  return (0, _actions.loadFilesSuccess)(result);
3863
4059
  }, function (err) {
3864
4060
  return (0, _actions.loadFilesErr)(fileName, err);
3865
- })] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref36) {
3866
- var value = _ref36.value,
3867
- done = _ref36.done;
4061
+ })] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref39) {
4062
+ var value = _ref39.value,
4063
+ done = _ref39.done;
3868
4064
  return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
3869
4065
  gen: gen,
3870
4066
  fileName: fileName,
@@ -3882,9 +4078,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3882
4078
  * @memberof visStateUpdaters
3883
4079
  * @public
3884
4080
  */
3885
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
3886
- var error = _ref37.error,
3887
- fileName = _ref37.fileName;
4081
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref40) {
4082
+ var error = _ref40.error,
4083
+ fileName = _ref40.fileName;
3888
4084
  // update ui with error message
3889
4085
  _window.console.warn(error);
3890
4086
  if (!state.fileLoading) {
@@ -3912,8 +4108,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
3912
4108
  * @memberof visStateUpdaters
3913
4109
  * @public
3914
4110
  */
3915
- var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref38) {
3916
- var dataId = _ref38.dataId;
4111
+ var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref41) {
4112
+ var dataId = _ref41.dataId;
3917
4113
  // apply cpuFilter
3918
4114
  var dataIds = (0, _commonUtils.toArray)(dataId);
3919
4115
  return dataIds.reduce(function (accu, id) {
@@ -3972,9 +4168,9 @@ function initialFileLoadingProgress(file, index) {
3972
4168
  error: null
3973
4169
  });
3974
4170
  }
3975
- function updateFileLoadingProgressUpdater(state, _ref40) {
3976
- var fileName = _ref40.fileName,
3977
- progress = _ref40.progress;
4171
+ function updateFileLoadingProgressUpdater(state, _ref43) {
4172
+ var fileName = _ref43.fileName,
4173
+ progress = _ref43.progress;
3978
4174
  // @ts-expect-error
3979
4175
  return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
3980
4176
  }
@@ -4066,8 +4262,8 @@ function updateAnimationDomain(state) {
4066
4262
  * Update the status of the editor
4067
4263
  * @memberof visStateUpdaters
4068
4264
  */
4069
- var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
4070
- var mode = _ref41.mode;
4265
+ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref44) {
4266
+ var mode = _ref44.mode;
4071
4267
  var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
4072
4268
  if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
4073
4269
  return state;
@@ -4085,10 +4281,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
4085
4281
  * Update editor features
4086
4282
  * @memberof visStateUpdaters
4087
4283
  */
4088
- function setFeaturesUpdater(state, _ref42) {
4284
+ function setFeaturesUpdater(state, _ref45) {
4089
4285
  var _lastFeature$properti, _lastFeature$properti2;
4090
- var _ref42$features = _ref42.features,
4091
- features = _ref42$features === void 0 ? [] : _ref42$features;
4286
+ var _ref45$features = _ref45.features,
4287
+ features = _ref45$features === void 0 ? [] : _ref45$features;
4092
4288
  var lastFeature = features.length && features[features.length - 1];
4093
4289
  var newState = _objectSpread(_objectSpread({}, state), {}, {
4094
4290
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -4161,10 +4357,10 @@ function findEditorFeature(state, feature) {
4161
4357
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
4162
4358
  * @memberof visStateUpdaters
4163
4359
  */
4164
- function setEditorFeaturePropertiesUpdater(state, _ref43) {
4360
+ function setEditorFeaturePropertiesUpdater(state, _ref46) {
4165
4361
  var _state$editor$selecte2;
4166
- var feature = _ref43.feature,
4167
- properties = _ref43.properties;
4362
+ var feature = _ref46.feature,
4363
+ properties = _ref46.properties;
4168
4364
  if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
4169
4365
  return state;
4170
4366
  }
@@ -4203,9 +4399,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref43) {
4203
4399
  * Set the current selected feature
4204
4400
  * @memberof uiStateUpdaters
4205
4401
  */
4206
- var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref44) {
4207
- var feature = _ref44.feature,
4208
- selectionContext = _ref44.selectionContext;
4402
+ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref47) {
4403
+ var feature = _ref47.feature,
4404
+ selectionContext = _ref47.selectionContext;
4209
4405
  // add bbox for polygon filter to speed up filtering
4210
4406
  var selectedFeature = feature;
4211
4407
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -4227,8 +4423,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
4227
4423
  * Delete existing feature from filters
4228
4424
  * @memberof visStateUpdaters
4229
4425
  */
4230
- function deleteFeatureUpdater(state, _ref45) {
4231
- var feature = _ref45.feature;
4426
+ function deleteFeatureUpdater(state, _ref48) {
4427
+ var feature = _ref48.feature;
4232
4428
  if (!feature) {
4233
4429
  return state;
4234
4430
  }
@@ -4373,10 +4569,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
4373
4569
  * @memberof visStateUpdaters
4374
4570
  * @public
4375
4571
  */
4376
- function sortTableColumnUpdater(state, _ref46) {
4377
- var dataId = _ref46.dataId,
4378
- column = _ref46.column,
4379
- mode = _ref46.mode;
4572
+ function sortTableColumnUpdater(state, _ref49) {
4573
+ var dataId = _ref49.dataId,
4574
+ column = _ref49.column,
4575
+ mode = _ref49.mode;
4380
4576
  var dataset = state.datasets[dataId];
4381
4577
  if (!dataset) {
4382
4578
  return state;
@@ -4397,9 +4593,9 @@ function sortTableColumnUpdater(state, _ref46) {
4397
4593
  * @memberof visStateUpdaters
4398
4594
  * @public
4399
4595
  */
4400
- function pinTableColumnUpdater(state, _ref47) {
4401
- var dataId = _ref47.dataId,
4402
- column = _ref47.column;
4596
+ function pinTableColumnUpdater(state, _ref50) {
4597
+ var dataId = _ref50.dataId,
4598
+ column = _ref50.column;
4403
4599
  var dataset = state.datasets[dataId];
4404
4600
  if (!dataset) {
4405
4601
  return state;
@@ -4413,9 +4609,9 @@ function pinTableColumnUpdater(state, _ref47) {
4413
4609
  * @memberof visStateUpdaters
4414
4610
  * @public
4415
4611
  */
4416
- function copyTableColumnUpdater(state, _ref48) {
4417
- var dataId = _ref48.dataId,
4418
- column = _ref48.column;
4612
+ function copyTableColumnUpdater(state, _ref51) {
4613
+ var dataId = _ref51.dataId,
4614
+ column = _ref51.column;
4419
4615
  var dataset = state.datasets[dataId];
4420
4616
  if (!dataset) {
4421
4617
  return state;
@@ -4439,9 +4635,9 @@ function copyTableColumnUpdater(state, _ref48) {
4439
4635
  * @memberof visStateUpdaters
4440
4636
  * @public
4441
4637
  */
4442
- function setColumnDisplayFormatUpdater(state, _ref49) {
4443
- var dataId = _ref49.dataId,
4444
- formats = _ref49.formats;
4638
+ function setColumnDisplayFormatUpdater(state, _ref52) {
4639
+ var dataId = _ref52.dataId,
4640
+ formats = _ref52.formats;
4445
4641
  var dataset = state.datasets[dataId];
4446
4642
  if (!dataset) {
4447
4643
  return state;
@@ -4492,12 +4688,12 @@ function requestDatasetColumnStatistics(_x4) {
4492
4688
  return _requestDatasetColumnStatistics.apply(this, arguments);
4493
4689
  }
4494
4690
  function _requestDatasetColumnStatistics() {
4495
- _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref50) {
4691
+ _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref53) {
4496
4692
  var dataset, field, filterProps, mappedValue, values, result;
4497
4693
  return _regenerator["default"].wrap(function _callee4$(_context4) {
4498
4694
  while (1) switch (_context4.prev = _context4.next) {
4499
4695
  case 0:
4500
- dataset = _ref50.dataset, field = _ref50.field;
4696
+ dataset = _ref53.dataset, field = _ref53.field;
4501
4697
  _context4.next = 3;
4502
4698
  return yieldForPaint();
4503
4699
  case 3:
@@ -4530,9 +4726,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
4530
4726
  * @memberof visStateUpdaters
4531
4727
  * @public
4532
4728
  */
4533
- function loadColumnStatsUpdater(state, _ref51) {
4534
- var dataId = _ref51.dataId,
4535
- fieldName = _ref51.fieldName;
4729
+ function loadColumnStatsUpdater(state, _ref54) {
4730
+ var dataId = _ref54.dataId,
4731
+ fieldName = _ref54.fieldName;
4536
4732
  var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
4537
4733
  var dataset = state.datasets[dataId];
4538
4734
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -4553,9 +4749,9 @@ function loadColumnStatsUpdater(state, _ref51) {
4553
4749
  return LOAD_COLUMN_STATS_TASK({
4554
4750
  dataset: newDataset,
4555
4751
  field: f
4556
- }).bimap(function (_ref52) {
4557
- var result = _ref52.result,
4558
- filterProps = _ref52.filterProps;
4752
+ }).bimap(function (_ref55) {
4753
+ var result = _ref55.result,
4754
+ filterProps = _ref55.filterProps;
4559
4755
  return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
4560
4756
  }, function (error) {
4561
4757
  return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
@@ -4570,11 +4766,11 @@ function loadColumnStatsUpdater(state, _ref51) {
4570
4766
  * @memberof visStateUpdaters
4571
4767
  * @public
4572
4768
  */
4573
- function loadColumnStatsSuccessUpdater(state, _ref53) {
4574
- var result = _ref53.result,
4575
- filterProps = _ref53.filterProps,
4576
- dataId = _ref53.dataId,
4577
- fieldName = _ref53.fieldName;
4769
+ function loadColumnStatsSuccessUpdater(state, _ref56) {
4770
+ var result = _ref56.result,
4771
+ filterProps = _ref56.filterProps,
4772
+ dataId = _ref56.dataId,
4773
+ fieldName = _ref56.fieldName;
4578
4774
  var dataset = state.datasets[dataId];
4579
4775
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
4580
4776
  return f.name === fieldName;
@@ -4602,10 +4798,10 @@ function loadColumnStatsSuccessUpdater(state, _ref53) {
4602
4798
  * @memberof visStateUpdaters
4603
4799
  * @public
4604
4800
  */
4605
- function loadColumnStatsErrorUpdater(state, _ref54) {
4606
- var error = _ref54.error,
4607
- dataId = _ref54.dataId,
4608
- fieldName = _ref54.fieldName;
4801
+ function loadColumnStatsErrorUpdater(state, _ref57) {
4802
+ var error = _ref57.error,
4803
+ dataId = _ref57.dataId,
4804
+ fieldName = _ref57.fieldName;
4609
4805
  _window.console.error(error);
4610
4806
  var dataset = state.datasets[dataId];
4611
4807
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
@@ -4686,9 +4882,95 @@ _action) {
4686
4882
  }
4687
4883
  });
4688
4884
  }
4689
- function setFilterAnimationTimeConfigUpdater(state, _ref55) {
4690
- var idx = _ref55.idx,
4691
- config = _ref55.config;
4885
+
4886
+ /**
4887
+ * Copy in-memory rows (or loaded vector-tile features) inside the selected
4888
+ * Draw on Map polygon into a new dataset.
4889
+ */
4890
+ function extractDataFromFeatureUpdater(state, _ref58) {
4891
+ var layerId = _ref58.layerId;
4892
+ var feature = state.editor.selectedFeature;
4893
+ var layer = state.layers.find(function (l) {
4894
+ return l.id === layerId;
4895
+ });
4896
+ var dataId = layer === null || layer === void 0 ? void 0 : layer.config.dataId;
4897
+ var dataset = dataId ? state.datasets[dataId] : null;
4898
+ if (!layer || !dataset || !dataId) {
4899
+ return state;
4900
+ }
4901
+
4902
+ // GPU range/time filters are not reflected in filteredIndex; evaluate them on CPU
4903
+ // the same way export data does, then clip the result to the drawing.
4904
+ if (!(0, _utils.isVectorTileExtractLayer)(layer)) {
4905
+ state = (0, _utils.filterDatasetCPU)(state, dataId);
4906
+ dataset = state.datasets[dataId];
4907
+ if (!dataset) {
4908
+ return state;
4909
+ }
4910
+ }
4911
+ var extracted;
4912
+ try {
4913
+ extracted = (0, _utils.extractRowsInsideFeature)({
4914
+ layer: layer,
4915
+ dataset: dataset,
4916
+ feature: feature
4917
+ });
4918
+ } catch (err) {
4919
+ var message = err instanceof Error ? err.message : String(err);
4920
+ return (0, _tasks.withTask)(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4921
+ return (0, _actions.addNotification)((0, _utils.errorNotification)({
4922
+ message: "Failed to extract data: ".concat(message),
4923
+ id: 'extract-data-from-feature'
4924
+ }));
4925
+ }));
4926
+ }
4927
+ if (!extracted) {
4928
+ return state;
4929
+ }
4930
+ if (!extracted.rowCount) {
4931
+ return (0, _tasks.withTask)(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4932
+ return (0, _actions.addNotification)((0, _utils.errorNotification)({
4933
+ message: (0, _utils.isVectorTileExtractLayer)(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
4934
+ id: 'extract-data-from-feature-empty'
4935
+ }));
4936
+ }));
4937
+ }
4938
+ var data;
4939
+ try {
4940
+ data = extracted.kind === 'geojson' ? (0, _processors.processGeojson)({
4941
+ type: 'FeatureCollection',
4942
+ features: extracted.features
4943
+ }) : {
4944
+ fields: extracted.fields,
4945
+ rows: extracted.rows
4946
+ };
4947
+ } catch (err) {
4948
+ var _message = err instanceof Error ? err.message : String(err);
4949
+ return (0, _tasks.withTask)(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4950
+ return (0, _actions.addNotification)((0, _utils.errorNotification)({
4951
+ message: "Failed to extract data: ".concat(_message),
4952
+ id: 'extract-data-from-feature'
4953
+ }));
4954
+ }));
4955
+ }
4956
+ return updateVisDataUpdater(state, {
4957
+ datasets: {
4958
+ info: {
4959
+ id: "extract-".concat((0, _commonUtils.generateHashId)(6)),
4960
+ label: "Extracted ".concat(dataset.label)
4961
+ },
4962
+ data: data
4963
+ },
4964
+ options: {
4965
+ keepExistingConfig: true,
4966
+ centerMap: false,
4967
+ autoCreateLayers: true
4968
+ }
4969
+ });
4970
+ }
4971
+ function setFilterAnimationTimeConfigUpdater(state, _ref59) {
4972
+ var idx = _ref59.idx,
4973
+ config = _ref59.config;
4692
4974
  var oldFilter = state.filters[idx];
4693
4975
  if (!oldFilter) {
4694
4976
  _window.console.error("filters.".concat(idx, " is undefined"));
@@ -4718,8 +5000,8 @@ function checkTimeConfigArgs(config) {
4718
5000
  /**
4719
5001
  * Update editor
4720
5002
  */
4721
- function setLayerAnimationTimeConfigUpdater(state, _ref56) {
4722
- var config = _ref56.config;
5003
+ function setLayerAnimationTimeConfigUpdater(state, _ref60) {
5004
+ var config = _ref60.config;
4723
5005
  if (!config) {
4724
5006
  return state;
4725
5007
  }
@@ -4917,8 +5199,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
4917
5199
  * @returns nextState
4918
5200
  * @public
4919
5201
  */
4920
- var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref57) {
4921
- var change = _ref57.payload.change;
5202
+ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref61) {
5203
+ var change = _ref61.payload.change;
4922
5204
  var loadingIndicatorValue = state.loadingIndicatorValue;
4923
5205
  if (!loadingIndicatorValue) {
4924
5206
  loadingIndicatorValue = 0;
@@ -4965,8 +5247,8 @@ function adjustTimeFilterInterval(state, filter) {
4965
5247
  }
4966
5248
  }, _utils.TIME_INTERVALS_ORDERED.length - 1);
4967
5249
  // @ts-ignore
4968
- var hexTileInterval = _utils.TIME_INTERVALS_ORDERED[intervalIndex];
4969
- interval = _utils.LayerToFilterTimeInterval[hexTileInterval];
5250
+ var layerTimeInterval = _utils.TIME_INTERVALS_ORDERED[intervalIndex];
5251
+ interval = _utils.LayerToFilterTimeInterval[layerTimeInterval];
4970
5252
  }
4971
5253
  if (!interval) {
4972
5254
  return filter;
@@ -4987,6 +5269,9 @@ function adjustTimeFilterInterval(state, filter) {
4987
5269
  // replace it with another dataId
4988
5270
  function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
4989
5271
  var _value$config, _value$config2;
5272
+ if (value == null) {
5273
+ return null;
5274
+ }
4990
5275
  if (Array.isArray(value)) {
4991
5276
  // for layers, filters, call defaultReplaceParentDatasetIds on each item in array
4992
5277
  var replaced = value.map(function (v) {
@@ -5038,10 +5323,10 @@ function findChildDatasetIds(value) {
5038
5323
  }
5039
5324
 
5040
5325
  // moved unmerged layers, filters, interactions
5041
- function moveValueToBeMerged(state, propValues, _ref59) {
5042
- var prop = _ref59.prop,
5043
- toMergeProp = _ref59.toMergeProp,
5044
- saveUnmerged = _ref59.saveUnmerged;
5326
+ function moveValueToBeMerged(state, propValues, _ref63) {
5327
+ var prop = _ref63.prop,
5328
+ toMergeProp = _ref63.toMergeProp,
5329
+ saveUnmerged = _ref63.saveUnmerged;
5045
5330
  // remove prop value from state
5046
5331
  // TODO: should we add remove updater to merger as well?
5047
5332
  if (!propValues) {
@@ -5092,23 +5377,58 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
5092
5377
  // preserveLayerOrder
5093
5378
  if ((_nextState$layerToBeM = nextState.layerToBeMerged) !== null && _nextState$layerToBeM !== void 0 && _nextState$layerToBeM.length) {
5094
5379
  var _serializedState$spli;
5095
- // copy split maps to be merged, because it will be reset in remove layer
5096
- nextState.splitMapsToBeMerged = (_serializedState$spli = serializedState === null || serializedState === void 0 ? void 0 : serializedState.splitMaps) !== null && _serializedState$spli !== void 0 ? _serializedState$spli : [];
5380
+ // copy split maps to be merged, because it will be reset in remove layer.
5381
+ // Keep the ones of a dataset replaced a moment earlier and not merged back yet:
5382
+ // its layers are no longer in the current split maps.
5383
+ nextState.splitMapsToBeMerged = (0, _utils.combineSplitMapsByIndex)(state.splitMapsToBeMerged, (_serializedState$spli = serializedState === null || serializedState === void 0 ? void 0 : serializedState.splitMaps) !== null && _serializedState$spli !== void 0 ? _serializedState$spli : []);
5097
5384
  nextState.layerOrder = (0, _toConsumableArray2["default"])(preserveLayerOrder);
5098
5385
  }
5099
5386
  return nextState;
5100
5387
  }
5101
- function replaceDatasetDepsInState(state, _ref60) {
5102
- var dataId = _ref60.dataId,
5103
- dataIdToUse = _ref60.dataIdToUse;
5388
+
5389
+ /**
5390
+ * The order to preserve for the items that will be merged back.
5391
+ *
5392
+ * `ids` comes from the serialized state, so it lists everything but the items
5393
+ * another dataset's replacement parked a moment ago: an app refreshing several
5394
+ * datasets in a row prepares the second replacement before the first one's
5395
+ * items have merged back. Writing `ids` as it is would drop those, and
5396
+ * `insertItemBasedOnPreservedOrder` puts an item it cannot place at the front —
5397
+ * so they would come back reversed. Where they belong is what the order written
5398
+ * when they were parked already says, so that order is kept for them.
5399
+ */
5400
+ function preservedOrderWithParked() {
5401
+ var previousOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5402
+ var ids = arguments.length > 1 ? arguments[1] : undefined;
5403
+ var parked = arguments.length > 2 ? arguments[2] : undefined;
5404
+ var parkedIds = parked.map(function (item) {
5405
+ return item === null || item === void 0 ? void 0 : item.id;
5406
+ }).filter(function (id) {
5407
+ return Boolean(id) && !ids.includes(id);
5408
+ });
5409
+ if (!parkedIds.length) {
5410
+ return ids;
5411
+ }
5412
+ var known = new Set([].concat((0, _toConsumableArray2["default"])(ids), (0, _toConsumableArray2["default"])(parkedIds)));
5413
+ var ordered = (previousOrder || []).filter(function (id) {
5414
+ return known.has(id);
5415
+ });
5416
+ var rest = [].concat((0, _toConsumableArray2["default"])(ids), (0, _toConsumableArray2["default"])(parkedIds)).filter(function (id) {
5417
+ return !ordered.includes(id);
5418
+ });
5419
+ return [].concat((0, _toConsumableArray2["default"])(ordered), (0, _toConsumableArray2["default"])(rest));
5420
+ }
5421
+ function replaceDatasetDepsInState(state, _ref64) {
5422
+ var dataId = _ref64.dataId,
5423
+ dataIdToUse = _ref64.dataIdToUse;
5104
5424
  var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
5105
- var nextState = state.mergers.reduce(function (accuState, _ref61) {
5106
- var prop = _ref61.prop,
5107
- toMergeProp = _ref61.toMergeProp,
5108
- replaceParentDatasetIds = _ref61.replaceParentDatasetIds,
5109
- getChildDatasetIds = _ref61.getChildDatasetIds,
5110
- saveUnmerged = _ref61.saveUnmerged,
5111
- preserveOrder = _ref61.preserveOrder;
5425
+ var nextState = state.mergers.reduce(function (accuState, _ref65) {
5426
+ var prop = _ref65.prop,
5427
+ toMergeProp = _ref65.toMergeProp,
5428
+ replaceParentDatasetIds = _ref65.replaceParentDatasetIds,
5429
+ getChildDatasetIds = _ref65.getChildDatasetIds,
5430
+ saveUnmerged = _ref65.saveUnmerged,
5431
+ preserveOrder = _ref65.preserveOrder;
5112
5432
  // get dataset ids that are depends on this dataset
5113
5433
  var props = (0, _commonUtils.toArray)(prop);
5114
5434
  var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
@@ -5117,13 +5437,20 @@ function replaceDatasetDepsInState(state, _ref60) {
5117
5437
  }) : [];
5118
5438
  var replacedState = accuState;
5119
5439
  savedProps.forEach(function (propValue, i) {
5120
- var _replacedState$merger;
5440
+ var _replacedState$merger, _replacedState$merger2;
5441
+ if (propValue == null) {
5442
+ return;
5443
+ }
5121
5444
  var mergerOptions = {
5122
5445
  prop: props[i],
5123
5446
  toMergeProp: toMergeProps[i],
5124
5447
  getChildDatasetIds: getChildDatasetIds,
5125
5448
  saveUnmerged: saveUnmerged
5126
5449
  };
5450
+
5451
+ // What another dataset's replacement parked a moment ago and has not
5452
+ // merged back yet, read before this one parks anything of its own.
5453
+ var parkedElsewhere = mergerOptions.toMergeProp !== undefined ? (0, _commonUtils.toArray)((_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 ? _replacedState$merger : []) : [];
5127
5454
  var replacedItem = (replaceParentDatasetIds === null || replaceParentDatasetIds === void 0 ? void 0 : replaceParentDatasetIds(propValue, dataId, dataIdToUse)) || defaultReplaceParentDatasetIds(propValue, dataId, dataIdToUse);
5128
5455
  replacedState = replacedItem ? replacePropValueInState(replacedState, replacedItem, mergerOptions) : replacedState;
5129
5456
 
@@ -5131,21 +5458,21 @@ function replaceDatasetDepsInState(state, _ref60) {
5131
5458
  // can still hold another dataset's items, replaced a moment earlier and
5132
5459
  // not merged back yet; overwriting the order they were parked with would
5133
5460
  // merge them back in reverse.
5134
- if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 && _replacedState$merger.length && preserveOrder) {
5135
- replacedState[preserveOrder] = propValue.map(function (item) {
5461
+ if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger2 = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger2 !== void 0 && _replacedState$merger2.length && preserveOrder) {
5462
+ replacedState[preserveOrder] = preservedOrderWithParked(replacedState[preserveOrder], propValue.map(function (item) {
5136
5463
  return item.id;
5137
- });
5464
+ }), parkedElsewhere);
5138
5465
  }
5139
5466
  });
5140
5467
  return replacedState;
5141
5468
  }, state);
5142
5469
  return nextState;
5143
5470
  }
5144
- function replacePropValueInState(state, replacedItem, _ref62) {
5145
- var prop = _ref62.prop,
5146
- toMergeProp = _ref62.toMergeProp,
5147
- getChildDatasetIds = _ref62.getChildDatasetIds,
5148
- saveUnmerged = _ref62.saveUnmerged;
5471
+ function replacePropValueInState(state, replacedItem, _ref66) {
5472
+ var prop = _ref66.prop,
5473
+ toMergeProp = _ref66.toMergeProp,
5474
+ getChildDatasetIds = _ref66.getChildDatasetIds,
5475
+ saveUnmerged = _ref66.saveUnmerged;
5149
5476
  // prop is depends on the dataset to be replaced
5150
5477
  // remove prop from state, and move it to toBeMerged
5151
5478
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -5163,4 +5490,4 @@ function replacePropValueInState(state, replacedItem, _ref62) {
5163
5490
  }
5164
5491
  return nextState;
5165
5492
  }
5166
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJUYXNrIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxMyIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE2IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE3IiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjE5IiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjAiLCJfcmVmMjAkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjAkcGF5bG9hZCRjb25maWciLCJfcmVmMjAkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyMSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjIyIiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjMiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjQiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyNSIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMjciLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjgiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYyOSIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzEkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsImJvdW5kcyIsImZpbmRNYXBCb3VuZHMiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNSZ2JDb2xvciIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzIiLCJfcmVmMzMiLCJja2V5IiwiY29sIiwiX3JlZjM0IiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIlNldCIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsImZsYXRNYXAiLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiREVMQVlfVEFTSyIsImxvYWROZXh0RmlsZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJMT0FEX0ZJTEVfVEFTSyIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMzUiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYzNSRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiVU5XUkFQX1RBU0siLCJfcmVmMzYiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjM3IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYzOCIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmNDAiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmNDEiLCJza2V0Y2hlc0VuYWJsZWQiLCJlbmFibGVEcmF3T25NYXBTa2V0Y2hlcyIsIkRSQVdfUE9JTlQiLCJEUkFXX0xJTkVTVFJJTkciLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmNDIiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkyIiwiX3JlZjQyJGZlYXR1cmVzIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJzaGFwZSIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNDMiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsIm5leHRFZGl0b3IiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ0Iiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ1Iiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ2IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ3IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OCIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwicGFyc2VGaWVsZFZhbHVlIiwidmFsdWVBdCIsImpvaW4iLCJjb3B5Iiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmNDkiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsImdldE1hcHBlZFZhbHVlIiwiZmlsdGVyUHJvcHMiLCJtYXBwZWRWYWx1ZSIsInlpZWxkRm9yUGFpbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfeDQiLCJfcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX2NhbGxlZTQiLCJfcmVmNTAiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTEiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1MiIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjUzIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1NCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwicHJvY2Vzc0dlb2pzb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY1NSIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNTYiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwiY29uc29sZSIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY1NyIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY1OSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNjAiLCJhY2N1U3RhdGUiLCJfcmVmNjEiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY2MiIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7bG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUxheWVyRGF0YSxcbiAgZmluZERlZmF1bHRMYXllcixcbiAgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMsXG4gIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyxcbiAgZ2V0TmV3TGF5ZXJHcm91cCxcbiAgYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyLFxuICByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIsXG4gIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcixcbiAgZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIsXG4gIGdldEluZGV4RnJvbUxheWVyRW50cnlJZCxcbiAgdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcixcbiAgZ2V0RmxhdExheWVyT3JkZXIsXG4gIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyXG59IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZixcbiAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICAgIHRleHRMYWJlbC5maW5kKHRsID0+IHRsLmNvbGxpc2lvbkVuYWJsZWQpPy5jb2xsaXNpb25FbmFibGVkID8/XG4gICAgICAgICAgZGVmYXVsdFRleHRMYWJlbC5jb2xsaXNpb25FbmFibGVkXG4gICAgICApXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gW1xuICAgICAgLi4udGV4dExhYmVsLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKHRleHRMYWJlbFswXT8uY29sbGlzaW9uRW5hYmxlZClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCh0bCA9PiAoey4uLnRsLCBbcHJvcF06IHZhbHVlfSkpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZSAoZS5nLiBtaXNzaW5nIGNvbHVtbnMpLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgIC8vIHJlbWFwIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgbmV3IGRhdGFzZXQgdG8gYXZvaWQgc3RhbGUgZmllbGQgcmVmZXJlbmNlc1xuICAgIC8vIHRoYXQgcG9pbnQgdG8gcm93cyBiZXlvbmQgdGhlIG5ldyBkYXRhc2V0J3MgbGVuZ3RoXG4gICAgY29uc3QgbmV3RGF0YXNldEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzO1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkOiBmaWVsZEtleX0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IG5ld0xheWVyLmNvbmZpZ1tmaWVsZEtleV07XG4gICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBuZXdEYXRhc2V0RmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGN1cnJlbnRGaWVsZC5uYW1lKTtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbZmllbGRLZXldID0gbWF0Y2hlZCB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChPYmplY3Qua2V5cyhyZW1hcHBlZEZpZWxkcykubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHJlbWFwcGVkRmllbGRzKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgZmllbGQgdHlwZSBjb21wYXRpYmlsaXR5IOKAlCBjbGVhcnMgZmllbGRzIHdob3NlIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gICAgLy8gd2l0aCB0aGUgY2hhbm5lbCdzIHN1cHBvcnRlZCBmaWVsZCB0eXBlcyAoZS5nLiBzdHJpbmcgZmllbGQgZm9yIGEgbnVtZXJpYyBzY2FsZSlcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7a2V5fSkgPT4ge1xuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IHByb3ZpZGVkQW5nbGUgPSBOdW1iZXIuaXNGaW5pdGUoKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSkgPyAoY29uZmlnIGFzIGFueSkuYW5nbGUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlcml2ZWRGcm9tQW5nbGUgPVxuICAgIHByb3ZpZGVkQW5nbGUgIT0gbnVsbCA/IHRleHRQbGFjZW1lbnRGcm9tQW5nbGUocHJvdmlkZWRBbmdsZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRleHRTaWRlID1cbiAgICBjb25maWc/LnRleHRTaWRlID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8uc2lkZSA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSk7XG4gIGNvbnN0IHRleHRWZXJ0aWNhbFBvc2l0aW9uID1cbiAgICBjb25maWc/LnRleHRWZXJ0aWNhbFBvc2l0aW9uID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8udmVydGljYWwgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICBpZDogY29uZmlnPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogY29uZmlnPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZTogY29uZmlnPy5hdXRvU2l6ZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplWTogY29uZmlnPy5hdXRvU2l6ZVkgPz8gdHJ1ZSxcbiAgICBhbmNob3JQb2ludDogY29uZmlnPy5hbmNob3JQb2ludCA/PyAoWzAsIDBdIGFzIFtudW1iZXIsIG51bWJlcl0pLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdOZXcgQW5ub3RhdGlvbicsXG4gICAgbGluZUNvbG9yOiBjb25maWc/LmxpbmVDb2xvciA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICBsaW5lV2lkdGg6IGNvbmZpZz8ubGluZVdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgIHRleHRXaWR0aDogY29uZmlnPy50ZXh0V2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gICAgdGV4dEhlaWdodDogY29uZmlnPy50ZXh0SGVpZ2h0ID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgICB0ZXh0VmVydGljYWxBbGlnbjogY29uZmlnPy50ZXh0VmVydGljYWxBbGlnbiA/PyAoJ2JvdHRvbScgYXMgY29uc3QpLFxuICAgIC4uLih0ZXh0U2lkZSA/IHt0ZXh0U2lkZX0gOiB7fSksXG4gICAgLi4uKHRleHRWZXJ0aWNhbFBvc2l0aW9uID8ge3RleHRWZXJ0aWNhbFBvc2l0aW9ufSA6IHt9KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRBbmdsZSA9XG4gICAgdGV4dFNpZGUgJiYgdGV4dFZlcnRpY2FsUG9zaXRpb25cbiAgICAgID8gQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlRbYCR7dGV4dFNpZGV9LSR7dGV4dFZlcnRpY2FsUG9zaXRpb259YF1cbiAgICAgIDogSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFO1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMFxuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKGRhdGFzZXQpLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICBub3RpZmljYXRpb25UYXNrc1xuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVycylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PlxuICAgICAgdGwuZmllbGQgJiYgcmVuYW1lc1t0bC5maWVsZC5uYW1lXVxuICAgICAgICA/IHsuLi50bCwgZmllbGQ6IHsuLi50bC5maWVsZCwgbmFtZTogcmVuYW1lc1t0bC5maWVsZC5uYW1lXX19XG4gICAgICAgIDogdGxcbiAgICApO1xuICAgIGlmICh0ZXh0TGFiZWwuc29tZSgodGwsIGkpID0+IHRsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2ldKSkge1xuICAgICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gdGV4dExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmFtZSkgPiAtMSk7XG5cbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IFNldChuZXdUYWJsZS5maWVsZHMubWFwKGYgPT4gZi5uYW1lKSk7XG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuXG4gIC8vIDIuIHJlY29uY2lsZSBmaWx0ZXJzXG4gIGxldCBuZXdGaWx0ZXJzID0gc3RhdGUuZmlsdGVyc1xuICAgIC5tYXAoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IHZpID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFJZCk7XG4gICAgICBpZiAodmkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID09PSAtMSkge1xuICAgICAgICAvLyBjb2x1bW4gaXMgZ29uZTogZHJvcCBhIHNpbmdsZS1kYXRhc2V0IGZpbHRlciwgc3BsaWNlIGl0IG91dCBvZiBhIHN5bmNlZCBvbmVcbiAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sdW1uIHByZXNlbnQgKHBvc3NpYmx5IHJlbmFtZWQpOiByZS1yZXNvbHZlIG5hbWUvZmllbGRJZHgvZG9tYWluXG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGJydXNoIGZpbHRlcnMgY2FycnkgYSBzZWNvbmQgeS1heGlzIGZpZWxkOyBmb2xsb3cgYSByZW5hbWUgdGhlcmUgdG9vXG4gICAgICBjb25zdCB5QXhpcyA9XG4gICAgICAgIHVwZGF0ZWQueUF4aXM/Lm5hbWUgJiZcbiAgICAgICAgKHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXVxuICAgICAgICAgID8gey4uLnVwZGF0ZWQueUF4aXMsIG5hbWU6IHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXX1cbiAgICAgICAgICA6IG5ld0ZpZWxkc0J5TmFtZS5oYXModXBkYXRlZC55QXhpcy5uYW1lKVxuICAgICAgICAgID8gdXBkYXRlZC55QXhpc1xuICAgICAgICAgIDogbnVsbCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAgIHlBeGlzLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIHJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZFxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDMuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIChncHVGaWx0ZXIgLyBmaWx0ZXJSZWNvcmQgLyBmaWx0ZXJlZEluZGV4KVxuICBuZXdUYWJsZS5maWx0ZXJUYWJsZShcbiAgICBuZXdGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCksXG4gICAge31cbiAgKTtcblxuICAvLyA0LiByZWNvbmNpbGUgbGF5ZXJzXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllcnMgPSBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IHJlY29uY2lsZWQgPSByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEobGF5ZXIsIHJlbmFtZXMsIG5ld1RhYmxlLCBzdGF0ZSk7XG4gICAgaWYgKHJlY29uY2lsZWQpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVkO1xuICAgIH1cbiAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyLmlkKTtcbiAgICByZXR1cm4gbGF5ZXI7IC8vIHBsYWNlaG9sZGVyLCBkcm9wcGVkIHZpYSByZW1vdmVMYXllclVwZGF0ZXIgYmVsb3dcbiAgfSk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHMsXG4gICAgZmlsdGVyczogbmV3RmlsdGVycyxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIC8vIDYuIGRyb3AgbGF5ZXJzIHRoYXQgbG9zdCB0aGVpciByZXF1aXJlZCBjb2x1bW5zXG4gIG5leHRTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwgbmV4dFN0YXRlKTtcblxuICAvLyA3LiByZWNvbXB1dGUgbGF5ZXIgZG9tYWlucyArIGRhdGEgZm9yIHRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICAvLyBTa2lwIGNvbXBhY3Rpb24gd2hpbGUgYmF0Y2hlcyBhcmUgc3RpbGwgYXJyaXZpbmcuIFRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAvLyBmaWxlIGlzIGNvbXBhY3RlZCBvbmNlIGluIHByb2Nlc3NGaWxlQ29udGVudC5cbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7XG4gICAgICAgICAgICBjb250ZW50OiB7Li4uYWNjdW11bGF0ZWQsIHNraXBBcnJvd0NvbXBhY3Q6IHRydWV9LFxuICAgICAgICAgICAgZmlsZUNhY2hlOiBbXVxuICAgICAgICAgIH0pLmJpbWFwKFxuICAgICAgICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSxcbiAgICAgICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIDogW10pLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgXSk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGZpbGVOYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZX0gPSBzdGF0ZS5maWxlTG9hZGluZztcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIGtpY2sgb2ZmIG5leHQgZmlsZSBvciBmaW5pc2hcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFwcGx5IGNwdUZpbHRlclxuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhSWQpO1xuXG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjdSwgaWQpID0+IGZpbHRlckRhdGFzZXRDUFUoYWNjdSwgaWQpLCBzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVzZXIgaW5wdXQgdG8gdXBkYXRlIHRoZSBpbmZvIG9mIHRoZSBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBJbmZvVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRNYXBJbmZvVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcEluZm86IHtcbiAgICAuLi5zdGF0ZS5tYXBJbmZvLFxuICAgIC4uLmFjdGlvbi5pbmZvXG4gIH1cbn0pO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YXNldHM6IERhdGFzZXRzXG4pOiB7c3RhdGU6IFZpc1N0YXRlOyBuZXdMYXllcnM6IExheWVyW119IHtcbiAgY29uc3QgZW1wdHk6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdTogTGF5ZXJbXSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXMgaW4gcmV2ZXJzZVxuICAgICAgICAuLi5nZXRMYXllck9yZGVyRnJvbUxheWVycyhkZWZhdWx0TGF5ZXJzKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGZpbmRGaWVsZHNUb1Nob3coe1xuICAgIC4uLmRhdGFzZXQsXG4gICAgbWF4RGVmYXVsdFRvb2x0aXBzOiBzdGF0ZS5tYXhEZWZhdWx0VG9vbHRpcHNcbiAgfSk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gcGlja18oJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnKShwaWNrXyhmaWxlTmFtZSkobWVyZ2VfKHByb2dyZXNzKSkpKHN0YXRlKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBsYXllciBkb21haW5zIGZvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBTIHtcbiAgY29uc3QgZGF0YUlkcyA9IHR5cGVvZiBkYXRhSWQgPT09ICdzdHJpbmcnID8gW2RhdGFJZF0gOiBkYXRhSWQ7XG4gIGNvbnN0IG5ld0xheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllckRhdGE6IGFueVtdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW48UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUyk6IFMge1xuICAvLyBtZXJnZSBhbGwgYW5pbWF0YWJsZSBsYXllciBkb21haW4gYW5kIHVwZGF0ZSBnbG9iYWwgY29uZmlnXG4gIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgdGltZVN0ZXBzOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXllckRvbWFpbnMgPSBhbmltYXRhYmxlTGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmFuaW1hdGlvbi5kb21haW4gfHwgW10pO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMobGF5ZXJEb21haW5zKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICAvLyBtZXJnZSB0aW1lU3RlcHNcbiAgbGV0IG1lcmdlZFRpbWVTdGVwczogbnVtYmVyW10gfCBudWxsID0gdW5pcTxudW1iZXI+KFxuICAgIGFuaW1hdGFibGVMYXllcnMucmVkdWNlKChhY2N1LCBsYXllcikgPT4ge1xuICAgICAgYWNjdS5wdXNoKC4uLihsYXllci5jb25maWcuYW5pbWF0aW9uLnRpbWVTdGVwcyB8fCBbXSkpO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pXG4gICkuc29ydCgpO1xuXG4gIG1lcmdlZFRpbWVTdGVwcyA9IG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggPyBtZXJnZWRUaW1lU3RlcHMgOiBudWxsO1xuXG4gIC8vIFRPRE86IGJldHRlciBoYW5kbGluZyBvZiBkdXJhdGlvbiBjYWxjdWxhdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IG1lcmdlZFRpbWVTdGVwc1xuICAgID8gKEJBU0VfU1BFRUQgKiAoMTAwMCAvIEZQUykpIC8gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCAvIChzdGF0ZS5hbmltYXRpb25Db25maWcuc3BlZWQgfHwgMSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltZVN0ZXBzOiBtZXJnZWRUaW1lU3RlcHNcbiAgICB9XG4gIH07XG5cbiAgLy8gcmVzZXQgY3VycmVudFRpbWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICBjb25zdCBzeW5jZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzPy5maW5kKGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkgYXNcbiAgICB8IFRpbWVSYW5nZUZpbHRlclxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGlmIHN5bmNlZCBmaWx0ZXIgZXhpc3Qgd2VlIG5lZWQgdG8gbWVyZ2UgYW5pbWF0aW9uQ29uZmlnIGFuZCBmaWx0ZXIgZG9tYWluc1xuICAvLyBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgdGltZSBhZ2FpbnN0IHRoZSBuZXcgbWVyZ2VkIGRvbWFpblxuICBjb25zdCBuZXdBbmltYXRpb25Eb21haW4gPSBzeW5jZWRGaWx0ZXJcbiAgICA/IG1lcmdlVGltZURvbWFpbnMoW21lcmdlZERvbWFpbiwgc3luY2VkRmlsdGVyLmRvbWFpbl0pXG4gICAgOiBtZXJnZWREb21haW47XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gaXNJblJhbmdlKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSwgbmV3QW5pbWF0aW9uRG9tYWluKVxuICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgOiBuZXdBbmltYXRpb25Eb21haW5bMF07XG5cbiAgaWYgKGN1cnJlbnRUaW1lICE9PSBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpIHtcbiAgICAvLyBpZiBjdXJyZW50VGltZSBjaGFuZ2VkLCBuZWVkIHRvIGNhbGwgYW5pbWF0aW9uVGltZVVwZGF0ZXIgdG8gcmUgY2FsbCBmb3JtYXRMYXllckRhdGFcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXh0U3RhdGUsIHt2YWx1ZTogY3VycmVudFRpbWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgdGhlIGVkaXRvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHNrZXRjaGVzRW5hYmxlZCA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXM7XG4gIGlmIChcbiAgICAhc2tldGNoZXNFbmFibGVkICYmXG4gICAgKG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPSU5UIHx8IG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX0xJTkVTVFJJTkcpXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBtb2RlLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xufTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZTogVmlzU3RhdGUsIGZlYXR1cmU/OiBGZWF0dXJlIHwgbnVsbCk6IEZlYXR1cmUgfCBudWxsIHtcbiAgaWYgKCFmZWF0dXJlPy5pZCkge1xuICAgIHJldHVybiBmZWF0dXJlIHx8IG51bGw7XG4gIH1cbiAgaWYgKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBmZWF0dXJlLmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIH1cbiAgY29uc3QgZnJvbUVkaXRvciA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmVhdHVyZS5pZCk7XG4gIGlmIChmcm9tRWRpdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FZGl0b3I7XG4gIH1cbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICAgIGlmIChmaWx0ZXI/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmVhdHVyZTtcbn1cblxuLyoqXG4gKiBTZXQgdXNlci1mYWNpbmcgR2VvSlNPTiBwcm9wZXJ0aWVzIG9uIGEgc2tldGNoIG9yIHBvbHlnb24tZmlsdGVyIGZlYXR1cmUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBwcm9wZXJ0aWVzfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZSwgZmVhdHVyZSk7XG4gIGlmICghc291cmNlPy5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRGZWF0dXJlID0gbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMoc291cmNlLCBwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShuZXh0RmVhdHVyZSk7XG4gIGNvbnN0IG5leHRFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBmaWx0ZXJJZFxuICAgICAgPyBzdGF0ZS5lZGl0b3IuZmVhdHVyZXNcbiAgICAgIDogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLm1hcChpdGVtID0+IChpdGVtLmlkID09PSBuZXh0RmVhdHVyZS5pZCA/IG5leHRGZWF0dXJlIDogaXRlbSkpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTpcbiAgICAgIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBuZXh0RmVhdHVyZS5pZFxuICAgICAgICA/IG5leHRGZWF0dXJlXG4gICAgICAgIDogc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5leHRFZGl0b3JcbiAgfTtcblxuICBpZiAoIWZpbHRlcklkKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4IDwgMCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShuZXh0RmVhdHVyZSwgZmlsdGVySWQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcblxuICAgIC8vIExhc3QgbGF5ZXIgcmVtb3ZlZDogdHVybiB0aGUgZmlsdGVyIHBvbHlnb24gYmFjayBpbnRvIGEgc2tldGNoXG4gICAgaWYgKCFuZXdMYXllcklkLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2tldGNoRmVhdHVyZSA9IHRvU2tldGNoRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aG91dEZpbHRlciA9IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvci5mZWF0dXJlcywgc2tldGNoRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBza2V0Y2hGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGx5IHBvbHlnb24gZmlsdGVyIHRvIGFsbCB2aXNpYmxlIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmVhdHVyZX0gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gIGNvbnN0IG5ld1N0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZSxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZpc2libGVMYXllcklkcyA9IGdldChwYXlsb2FkLCAndmlzaWJsZUxheWVySWRzJyk7XG4gIGNvbnN0IGFsbExheWVySWRzID0gQXJyYXkuaXNBcnJheSh2aXNpYmxlTGF5ZXJJZHMpXG4gICAgPyB2aXNpYmxlTGF5ZXJJZHNcbiAgICA6IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5pc1Zpc2libGUpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBhbGxMYXllcklkc1xuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Db3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge3R5cGV9ID0gZGF0YXNldC5maWVsZHNbZmllbGRJZHhdO1xuICBjb25zdCB0ZXh0ID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChyb3cgPT4gcGFyc2VGaWVsZFZhbHVlKHJvdy52YWx1ZUF0KGZpZWxkSWR4KSwgdHlwZSksIHRydWUpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvcHkodGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFNldCBkaXNwbGF5IGZvcm1hdCBmcm9tIGNvbHVtbnMgZnJvbSB1c2VyIHNlbGVjdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZvcm1hdHN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHM7XG4gIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgICBpZiAoZmllbGRJZHggPj0gMCkge1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGZvcm1hdHNbY29sdW1uXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gbmV3RmllbGRzW2ZpZWxkSWR4XTtcbiAgICAgIG5ld0ZpZWxkcyA9IHN3YXBfKG1lcmdlXyh7ZGlzcGxheUZvcm1hdH0pKGZpZWxkKSBhcyB7aWQ6IHN0cmluZ30pKFxuICAgICAgICBuZXdGaWVsZHMgYXMge2lkOiBzdHJpbmd9W11cbiAgICAgICkgYXMgRmllbGRbXTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzIGFzIEZpZWxkW119KTtcbiAgbGV0IG5ld1N0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgLy8gdXBkYXRlIGNvbG9yRmllbGQgZGlzcGxheUZvcm1hdFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT5cbiAgICAgIGxheWVyLmNvbmZpZz8uY29sb3JGaWVsZD8ubmFtZSAmJiBsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICBjb2xvckZpZWxkOiB7XG4gICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvckZpZWxkLFxuICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2xheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllclxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbnR5cGUgTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQgPSB7XG4gIGRhdGFzZXQ6IFZpc1N0YXRlWydkYXRhc2V0cyddW3N0cmluZ107XG4gIGZpZWxkOiBGaWVsZDtcbn07XG5cbmZ1bmN0aW9uIGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMgfCBudWxsKTogdW5rbm93bltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbHRlclByb3BzICYmICdtYXBwZWRWYWx1ZScgaW4gZmlsdGVyUHJvcHMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmlsdGVyUHJvcHMubWFwcGVkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24geWllbGRGb3JQYWludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3Moe2RhdGFzZXQsIGZpZWxkfTogTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQpIHtcbiAgLy8gWWllbGQgc28gdGhlIGRhdGEgdGFibGUgYW5kIHBlci1jb2x1bW4gbG9hZGluZyBzcGlubmVycyBjYW4gcGFpbnQgZmlyc3QuXG4gIGF3YWl0IHlpZWxkRm9yUGFpbnQoKTtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBmaWVsZC5maWx0ZXJQcm9wcyB8fCBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkLm5hbWUpO1xuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzKTtcbiAgY29uc3QgdmFsdWVzID0gbWFwcGVkVmFsdWUgPz8gY29sbGVjdENvbHVtblZhbHVlcyhkYXRhc2V0LmRhdGFDb250YWluZXIsIGZpZWxkLmZpZWxkSWR4KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Q29sdW1uU3RhdGlzdGljcyh7XG4gICAgdmFsdWVzLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcblxuICByZXR1cm4ge3Jlc3VsdCwgZmlsdGVyUHJvcHN9O1xufVxuXG5jb25zdCBMT0FEX0NPTFVNTl9TVEFUU19UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzLFxuICAnTE9BRF9DT0xVTU5fU1RBVFNfVEFTSydcbik7XG5cbi8qKlxuICogU3RhcnQgbG9hZGluZyBjb2x1bW4gc3RhdGlzdGljcyBmb3Igb25lIG9yIG1vcmUgZmllbGRzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmllbGROYW1lc1RvTG9hZCA9IHRvQXJyYXkoZmllbGROYW1lKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkc1RvTG9hZCA9IGRhdGFzZXQ/LmZpZWxkcy5maWx0ZXIoZiA9PiBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGYubmFtZSkpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGZpZWxkLm5hbWUpID8gey4uLmZpZWxkLCBpc0xvYWRpbmdTdGF0czogdHJ1ZX0gOiBmaWVsZFxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuXG4gIGNvbnN0IHRhc2tzID0gZmllbGRzVG9Mb2FkLm1hcChmID0+XG4gICAgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyh7ZGF0YXNldDogbmV3RGF0YXNldCwgZmllbGQ6IGZ9KS5iaW1hcChcbiAgICAgICh7cmVzdWx0LCBmaWx0ZXJQcm9wc30pID0+IGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MobmV3RGF0YXNldC5pZCwgZi5uYW1lLCByZXN1bHQsIGZpbHRlclByb3BzKSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IGxvYWRDb2x1bW5TdGF0c0Vycm9yKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgZXJyb3IpXG4gICAgKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICByZXR1cm4gd2l0aFRhc2sobmV4dFN0YXRlLCB0YXNrcyk7XG59XG5cbi8qKlxuICogUGVyc2lzdCBsb2FkZWQgY29sdW1uIHN0YXRpc3RpY3Mgb24gdGhlIGZpZWxkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtyZXN1bHQsIGZpbHRlclByb3BzLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgY29sdW1uU3RhdHM6IHJlc3VsdFxuICB9O1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGZpbHRlclByb3BzOiBuZXdGaWx0ZXJQcm9wcywgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIENsZWFyIGxvYWRpbmcgZmxhZyB3aGVuIGNvbHVtbiBzdGF0aXN0aWNzIGZhaWwuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIENvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcbiAgcmV0dXJuIHBpY2tfKCdhbmltYXRpb25Db25maWcnKShtZXJnZV8odXBkYXRlcykpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25cbik6IFMge1xuICBjb25zdCB7ZXZlbnQsIGxheWVyfSA9IGFjdGlvbjtcbiAgY29uc3Qge2lkOiBkZWNrZ2xMYXllcklkLCBjb3VudH0gPSBldmVudDtcbiAgaWYgKCFsYXllcikge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXJGaWx0ZXJlZEl0ZW1zIGxheWVyIGRvZXNudCBleGlzdHNgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVyLmZpbHRlcmVkSXRlbUNvdW50Py5bZGVja2dsTGF5ZXJJZF0gPT09IGNvdW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQgPSB7XG4gICAgLi4ubGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQsXG4gICAgW2RlY2tnbExheWVySWRdOiBjb3VudFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzd2FwXyhsYXllcikoc3RhdGUubGF5ZXJzKVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBXTVMgZmVhdHVyZSBpbmZvIGFuZCBwaW4gdG9vbHRpcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd21zRmVhdHVyZUluZm9VcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5XTVNGZWF0dXJlSW5mb0FjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZUluZm8sIGNvb3JkaW5hdGV9ID0gYWN0aW9uO1xuICBpZiAoIWxheWVyKSB7XG4gICAgY29uc29sZS53YXJuKGBXTVMgZmVhdHVyZSBpbmZvIGxheWVyIGRvZXNuJ3QgZXhpc3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBjbGlja2VkIG9iamVjdCBzaW1pbGFyIHRvIGxheWVyQ2xpY2tVcGRhdGVyIHRvIHBpbiB0aGUgdG9vbHRpcFxuICBjb25zdCBjbGlja2VkID0gZmVhdHVyZUluZm9cbiAgICA/IHtcbiAgICAgICAgcGlja2VkOiB0cnVlLFxuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICB3bXNGZWF0dXJlSW5mbzogZmVhdHVyZUluZm9cbiAgICAgICAgfSxcbiAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSB8fCBbMCwgMF0sXG4gICAgICAgIGxheWVyOiB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGlkeDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVyLmlkKSxcbiAgICAgICAgICAgIGlkOiBsYXllci5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWRcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4OiBmaWx0ZXJJZHgsIGVuYWJsZSA9IGZhbHNlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuXG4gIC8vIGlmIHdlIGVuYWJsZSBzeW5jIHdlIGFyZSBnb2luZyB0byBtZXJnZSBmaWx0ZXIgYW5kIGFuaW1hdGlvbkNvbmZpZyBkb21haW5zIGFuZCBzdG9yZSBpbnRvIGZpbHRlci5kb21haW5cbiAgaWYgKGVuYWJsZSkge1xuICAgIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhuZXdTdGF0ZS5sYXllcnMpO1xuICAgIC8vIGlmIG5vIGFuaW1hdGFibGVMYXllcnMgYXJlIHByZXNlbnQgd2Ugc2ltcGx5IHJldHVyblxuICAgIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhhbmltYXRhYmxlTGF5ZXJzKTtcbiAgICBjb25zdCBoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIgPSBCb29sZWFuKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoKTtcblxuICAgIGNvbnN0IG5ld0ZpbHRlckRvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMoW2ZpbHRlci5kb21haW4sIG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW5dKTtcblxuICAgIC8vIHdlIG9ubHkgdXBkYXRlIGFuaW1hdGlvbldpbmRvdyBpZiB3ZSBoYXZlIGludGVydmFsIGJhc2VkIGFuaW1hdGlvbiBsYXllcnMgd2l0aCBkZWZpbmVkIGludGVydmFscyBhbmQgdGhlIGN1cnJlbnQgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3cgaXMgbm90IGludGVydmFsXG4gICAgaWYgKGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllcikge1xuICAgICAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpIHtcbiAgICAgICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgICAgaWQ6IGZpbHRlci5pZCxcbiAgICAgICAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAgIC8vIGFkanVzdCB0aW1lIGZpbHRlciBpbnRlcnZhbFxuICAgICAgbmV3RmlsdGVyID0gYWRqdXN0VGltZUZpbHRlckludGVydmFsKG5ld1N0YXRlLCBuZXdGaWx0ZXIpO1xuXG4gICAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIGFkanVzdCB2YWx1ZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKFxuICAgICAgbmV3RmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICA/IFtuZXdGaWx0ZXJEb21haW5bMF0sIG5ld0ZpbHRlckRvbWFpblswXV1cbiAgICAgICAgOiBuZXdGaWx0ZXJEb21haW4sXG4gICAgICB7Li4ubmV3RmlsdGVyLCBkb21haW46IG5ld0ZpbHRlckRvbWFpbn1cbiAgICApO1xuXG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgIC4uLihuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyKSxcbiAgICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgIH07XG5cbiAgICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIHNldCB0aGUgYW5pbWF0aW9uIGNvbmZpZyB2YWx1ZSB0byBtYXRjaCBmaWx0ZXIgdmFsdWVcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgdmFsdWU6IG5ld0ZpbHRlci52YWx1ZVtuZXdGaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBkb21haW4gYW5kIHN0ZXBcbiAgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2VcbiAgfTtcblxuICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgfTtcblxuICAvLyByZXNldCBzeW5jIHRpbWVsaW5lIG1vZGVcbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogU1lOQ19USU1FTElORV9NT0RFUy5lbmRcbiAgfSk7XG5cbiAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAvLyByZXNldCBmaWx0ZXIgdmFsdWVcbiAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5ld0ZpbHRlci5kb21haW4sIG5ld0ZpbHRlcik7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICB9KTtcblxuICAvLyByZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0b1xuICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIHZhbHVlOiBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluPy5bMF0gPz8gbnVsbFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5zZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZUFjdGlvblxuKSB7XG4gIGNvbnN0IHtpZDogZmlsdGVySWQsIG1vZGU6IHN5bmNUaW1lbGluZU1vZGV9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgaWYgKCF2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlciwgc3luY1RpbWVsaW5lTW9kZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNUaW1lbGluZU1vZGVcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICByZXR1cm4gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgZmlsdGVySWR4KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgb2YgdGhlIGxvYWRpbmcgaW5kaWNhdG9yLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSB2aXNTdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBheWxvYWQgd2l0aCBjaGFuZ2Ugb2YgbnVtYmVyIG9mIGFjdGl2ZSBsb2FkaW5nIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtwYXlsb2FkOiB7Y2hhbmdlfX06IHtwYXlsb2FkOiBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZH1cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IHtsb2FkaW5nSW5kaWNhdG9yVmFsdWV9ID0gc3RhdGU7XG4gIGlmICghbG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlID0gMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlOiBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGZpbHRlcklkeDogbnVtYmVyKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgaWYgKChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkge1xuICAgIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwc1xuICAgICAgPyBzbmFwVG9NYXJrcyh0aW1lbGluZVZhbHVlLCBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzKVxuICAgICAgOiB0aW1lbGluZVZhbHVlO1xuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKHN0YXRlLCB7dmFsdWV9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyLnZhbHVlW2ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSkge1xuICAgIHJldHVybiBmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZSA/PyBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbiAgfVxuXG4gIHJldHVybiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciwgbmV3TW9kZTogbnVtYmVyKSB7XG4gIHJldHVybiAhKFxuICAgIGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSAmJiBuZXdNb2RlID09PSBTWU5DX1RJTUVMSU5FX01PREVTLnN0YXJ0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChzdGF0ZSwgZmlsdGVyKSB7XG4gIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgbGV0IGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbEluZGV4ID0gaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5yZWR1Y2UoKGN1cnJlbnRJbmRleCwgbCkgPT4ge1xuICAgICAgaWYgKGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmZpbmRJbmRleChpID0+IGkgPT09IGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gbmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCA8IGN1cnJlbnRJbmRleCA/IG5ld0luZGV4IDogY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0sIFRJTUVfSU5URVJWQUxTX09SREVSRUQubGVuZ3RoIC0gMSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGhleFRpbGVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2hleFRpbGVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXJcbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
5493
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIyIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjMiLCJfcmVmMjMkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjMkcGF5bG9hZCRjb25maWciLCJfcmVmMjMkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyNCIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjI1IiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjYiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjciLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyOCIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyOSIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzAiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzEiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMyIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzQiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzQkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiZGVlcG1lcmdlIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzUiLCJfcmVmMzYiLCJja2V5IiwiY29sIiwiX3JlZjM3IiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9yZW5hbWVzJGYkbmFtZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM4IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzgkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM5IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWY0MCIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDEiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQzIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ0Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ1IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0NSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQ2IiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0NyIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0OCIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OSIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MCIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTEiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjUyIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjUzIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjU0IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTUiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1NiIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTciLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0ZWQiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU5IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY2MCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjYxIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjMiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwiaWRzIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjY0IiwiYWNjdVN0YXRlIiwiX3JlZjY1IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjY2IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcixcbiAgbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMsXG4gIHRvU2tldGNoRmVhdHVyZSxcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIGlzU2F2ZWRMYXllckNvbmZpZ1YxLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtnZXRGaWxlc1RvUGFyc2UsIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCwgcHJvY2Vzc0dlb2pzb259IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgRmVhdHVyZSxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXQsXG4gIENoYXJ0Q29uZmlnLFxuICBMYXllckNoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyBkaXNhYmxlIHN0YWNrIGNhcHR1cmUgZm9yIHdpdGhUYXNrIGNhbGxzIHRoYXQgaGFwcGVuIG91dHNpZGUgc3RyaWN0IHJlZHVjZXIgY29udGV4dFxuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gaXNTYXZlZExheWVyQ29uZmlnVjEobmV3TGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpXG4gICAgOiBuZXdMYXllckNvbmZpZztcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmLFxuICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbihcbiAgICAgICAgdGV4dExhYmVsLmZpbmQodGwgPT4gdGwuY29sbGlzaW9uRW5hYmxlZCk/LmNvbGxpc2lvbkVuYWJsZWQgPz9cbiAgICAgICAgICBkZWZhdWx0VGV4dExhYmVsLmNvbGxpc2lvbkVuYWJsZWRcbiAgICAgIClcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICB7XG4gICAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4odGV4dExhYmVsWzBdPy5jb2xsaXNpb25FbmFibGVkKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIGlmIChpZHggPT09ICdhbGwnICYmIHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKHRsID0+ICh7Li4udGwsIFtwcm9wXTogdmFsdWV9KSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIC8vIEplbmtzIGJyZWFrcyBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBjb2xvcnMuIFJlY2FsY3VsYXRlIHRoZSBkb21haW4gd2hlblxuICAvLyB0aGUgY29sb3IgcmFuZ2Ugb2YgYSBKZW5rcyBjaGFubmVsIGNoYW5nZXMuXG4gIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICBPYmplY3Qua2V5cyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IG5ld0xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbm5lbD8uc2NhbGUgJiZcbiAgICAgICAgICBuZXdMYXllci5jb25maWdbY2hhbm5lbC5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmplbmtzICYmXG4gICAgICAgICAgY2hhbm5lbC5yYW5nZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24ubmV3VmlzQ29uZmlnLCBjaGFubmVsLnJhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFtcbiAgICAnZGF0YUlkJyxcbiAgICAnbmFtZScsXG4gICAgJ2ZpZWxkSWR4JyxcbiAgICAnZ3B1Q2hhbm5lbCcsXG4gICAgJ2VuZE5hbWUnLFxuICAgICdlbmRGaWVsZElkeCcsXG4gICAgJ2VuZE1hcHBlZFZhbHVlJyxcbiAgICAnZ3B1RW5kQ2hhbm5lbCdcbiAgXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4oXG4gICAgcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgY2hhcnQgPT4gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSAmJiBjaGFydC5sYXllcklkID09PSBsYXllclRvUmVtb3ZlLmlkXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnKTogY2hhcnQgaXMgTGF5ZXJDaGFydENvbmZpZyB7XG4gIHJldHVybiBjaGFydC50eXBlID09PSAnbGF5ZXJDaGFydCc7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnLCBwcm9wczogUGFydGlhbDxDaGFydENvbmZpZz4pOiBDaGFydENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY2hhcnQsXG4gICAgLi4ucHJvcHMsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgIC4uLihwcm9wcy5kaXNwbGF5IHx8IHt9KVxuICAgIH0sXG4gICAgY2hhcnREaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5jaGFydERpc3BsYXksXG4gICAgICAuLi4oKHByb3BzIGFzIENoYXJ0Q29uZmlnKS5jaGFydERpc3BsYXkgfHwge30pXG4gICAgfVxuICB9IGFzIENoYXJ0Q29uZmlnO1xufVxuXG5mdW5jdGlvbiBheGlzRmllbGRJZlByZXNlbnQ8VCBleHRlbmRzIHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbDsgdGl0bGU/OiBzdHJpbmcgfCBudWxsfT4oXG4gIGF4aXM6IFQgfCB1bmRlZmluZWQsXG4gIGZpZWxkTmFtZXM6IFNldDxzdHJpbmc+XG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFheGlzPy5maWVsZD8ubmFtZSB8fCBmaWVsZE5hbWVzLmhhcyhheGlzLmZpZWxkLm5hbWUpKSB7XG4gICAgcmV0dXJuIGF4aXM7XG4gIH1cbiAgcmV0dXJuIHsuLi5heGlzLCBmaWVsZDogbnVsbCwgdGl0bGU6IG51bGx9O1xufVxuXG5mdW5jdGlvbiBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKFxuICBjaGFydDogQ2hhcnRDb25maWcsXG4gIGRhdGFzZXQ6IHtmaWVsZHM/OiB7bmFtZTogc3RyaW5nfVtdfSB8IHVuZGVmaW5lZFxuKTogQ2hhcnRDb25maWcge1xuICBjb25zdCBmaWVsZE5hbWVzID0gbmV3IFNldCgoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkpO1xuICBjb25zdCBuZXh0ID0gY2hhcnQgYXMgQ2hhcnRDb25maWcgJiB7XG4gICAgeEF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHlBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBheGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBncm91cEJ5Pzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB2YWx1ZT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gIH07XG4gIHJldHVybiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0LCB7XG4gICAgeEF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnhBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICB5QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueUF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LmF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGdyb3VwQnk6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0Lmdyb3VwQnksIGZpZWxkTmFtZXMpLFxuICAgIHZhbHVlOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC52YWx1ZSwgZmllbGROYW1lcylcbiAgfSBhcyBQYXJ0aWFsPENoYXJ0Q29uZmlnPik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHNob3VsZFJlbW92ZTogKGNoYXJ0OiBDaGFydENvbmZpZykgPT4gYm9vbGVhblxuKTogVCB7XG4gIGNvbnN0IGNoYXJ0cyA9IHN0YXRlLmNoYXJ0cyB8fCBbXTtcbiAgY29uc3QgcmVtb3ZlZCA9IGNoYXJ0cy5maWx0ZXIoc2hvdWxkUmVtb3ZlKTtcbiAgaWYgKCFyZW1vdmVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCByZW1vdmVkSWRzID0gbmV3IFNldChyZW1vdmVkLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBmaWx0ZXJJZHMgPSBuZXcgU2V0KFxuICAgIHJlbW92ZWQuZmxhdE1hcChjaGFydCA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNoYXJ0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgICAgIHJldHVybiBpZCA/IFtpZCwgYCR7aWR9LXhgLCBgJHtpZH0teWBdIDogW107XG4gICAgfSlcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBjaGFydHMuZmlsdGVyKGNoYXJ0ID0+ICFyZW1vdmVkSWRzLmhhcyhjaGFydC5pZCkpXG4gIH07XG4gIGlmIChmaWx0ZXJJZHMuc2l6ZSkge1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGUgYXMgVDtcbn1cblxuLyoqXG4gKiBBZGQgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZENoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y2hhcnR9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY2hhcnQ/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUuY2hhcnRzIHx8IFtdKS5zb21lKGV4aXN0aW5nID0+IGV4aXN0aW5nLmlkID09PSBjaGFydC5pZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChleGlzdGluZyA9PiAoe1xuICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHtcbiAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBjaGFydC5kaXNwbGF5Py5pc0NvbmZpZ0FjdGl2ZSA/PyBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSAoc3RhdGUuY2hhcnRzIHx8IFtdKS5maW5kSW5kZXgoY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmNoYXJ0c1tpZHhdO1xuICBjb25zdCBkYXRhSWRDaGFuZ2VkID0gdHlwZW9mIHByb3BzLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgcHJvcHMuZGF0YUlkICE9PSBwcmV2LmRhdGFJZDtcbiAgY29uc3QgbGF5ZXJJZENoYW5nZWQgPVxuICAgIGlzTGF5ZXJDaGFydENvbmZpZyhwcmV2KSAmJlxuICAgIHR5cGVvZiAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCA9PT0gJ3N0cmluZycgJiZcbiAgICAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCAhPT0gcHJldi5sYXllcklkO1xuICBsZXQgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcocHJldiwgcHJvcHMpO1xuICBpZiAoZGF0YUlkQ2hhbmdlZCB8fCBsYXllcklkQ2hhbmdlZCkge1xuICAgIGNvbnN0IGRhdGFJZCA9IG5leHQuZGF0YUlkIHx8IHVuZGVmaW5lZDtcbiAgICBuZXh0ID0gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhuZXh0LCBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogdW5kZWZpbmVkKTtcbiAgICBpZiAobmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCkge1xuICAgICAgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcobmV4dCwge1xuICAgICAgICBjcm9zc0ZpbHRlcjogey4uLm5leHQuY3Jvc3NGaWx0ZXIsIGVuYWJsZWQ6IGZhbHNlLCB2YWx1ZToge30sIGZpZWxkTmFtZXM6IHt9fVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYXJ0cyA9IFsuLi5zdGF0ZS5jaGFydHNdO1xuICBjaGFydHNbaWR4XSA9IG5leHQ7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0c1xuICB9O1xuICBjb25zdCBmaWx0ZXJJZCA9IG5leHQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkIHx8IHByZXYuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICBpZiAocHJldi5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiAhbmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiBmaWx0ZXJJZCkge1xuICAgIGNvbnN0IG93bmVkRmlsdGVySWRzID0gbmV3IFNldChbZmlsdGVySWQsIGAke2ZpbHRlcklkfS14YCwgYCR7ZmlsdGVySWR9LXlgXSk7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gb3duZWRGaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBjaGFydCBhbmQgYW55IGNyb3NzLWZpbHRlciBpdCBvd25zXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoc3RhdGUsIGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBwcm92aWRlZEFuZ2xlID0gTnVtYmVyLmlzRmluaXRlKChjb25maWcgYXMgYW55KT8uYW5nbGUpID8gKGNvbmZpZyBhcyBhbnkpLmFuZ2xlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZXJpdmVkRnJvbUFuZ2xlID1cbiAgICBwcm92aWRlZEFuZ2xlICE9IG51bGwgPyB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlKHByb3ZpZGVkQW5nbGUpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0ZXh0U2lkZSA9XG4gICAgY29uZmlnPy50ZXh0U2lkZSA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnNpZGUgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUpO1xuICBjb25zdCB0ZXh0VmVydGljYWxQb3NpdGlvbiA9XG4gICAgY29uZmlnPy50ZXh0VmVydGljYWxQb3NpdGlvbiA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnZlcnRpY2FsID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTik7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICAuLi4odGV4dFNpZGUgPyB7dGV4dFNpZGV9IDoge30pLFxuICAgIC4uLih0ZXh0VmVydGljYWxQb3NpdGlvbiA/IHt0ZXh0VmVydGljYWxQb3NpdGlvbn0gOiB7fSksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0QW5nbGUgPVxuICAgIHRleHRTaWRlICYmIHRleHRWZXJ0aWNhbFBvc2l0aW9uXG4gICAgICA/IEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UW2Ake3RleHRTaWRlfS0ke3RleHRWZXJ0aWNhbFBvc2l0aW9ufWBdXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gbnVsbCA6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OlxuICAgICAgc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgPT09IGlkID8gZmFsc2UgOiBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmRJbmRleChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5hbm5vdGF0aW9uc1tpZHhdO1xuICBsZXQgbmV4dEFubm90YXRpb246IEFubm90YXRpb247XG5cbiAgaWYgKGNvbmZpZy5raW5kICYmIGNvbmZpZy5raW5kICE9PSBwcmV2LmtpbmQpIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb25Qcm9wc1BhcnRpYWwpO1xuICB9IGVsc2Uge1xuICAgIG5leHRBbm5vdGF0aW9uID0gey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvbjtcbiAgfVxuXG4gIGNvbnN0IG5ld0Fubm90YXRpb25zID0gWy4uLnN0YXRlLmFubm90YXRpb25zXTtcbiAgbmV3QW5ub3RhdGlvbnNbaWR4XSA9IG5leHRBbm5vdGF0aW9uO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBuZXdBbm5vdGF0aW9uc1xuICB9O1xufTtcblxuLyoqXG4gKiBEdXBsaWNhdGUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmFubm90YXRpb25zLmZpbmQoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmICghb3JpZ2luYWwpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgZHVwbGljYXRlIGFubm90YXRpb24gd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSB7XG4gICAgLi4uY2xvbmVEZWVwKG9yaWdpbmFsKSxcbiAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IGBDb3B5IG9mICR7b3JpZ2luYWwubGFiZWx9YFxuICB9O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBpc0VkaXRpbmdUZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGlkID09PSBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCAmJlxuICAgIChpc0VkaXRpbmdUZXh0ID8/IGZhbHNlKSA9PT0gc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IGlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBpc0VkaXRpbmdUZXh0ID8/IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pLFxuICAgIGNoYXJ0ID0+IHtcbiAgICAgIGlmIChjaGFydC5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJzVG9SZW1vdmUuaW5jbHVkZXMoY2hhcnQubGF5ZXJJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMFxuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKGRhdGFzZXQpLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICBub3RpZmljYXRpb25UYXNrc1xuICApO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVyZ2Vyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgbWVyZ2VyczogTWVyZ2VyPGFueT5bXTtcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge21lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSA9IGFjdGlvbjtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbWVyZ2VTdGF0ZVJlc3VsdCA9IG1lcmdlU3RhdGVGcm9tTWVyZ2VycyhcbiAgICBzdGF0ZSxcbiAgICB7XG4gICAgICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgICAgIC4uLnN0YXRlLmluaXRpYWxTdGF0ZVxuICAgIH0sXG4gICAgbWVyZ2VycyxcbiAgICAvLyBuZXdEYXRhSWRzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gICk7XG5cbiAgLy8gaWYgYWxsIG1lcmdlZCwga2lja3VwIHBvc3QgbWVyZ2UgcHJvY2Vzc1xuICAvLyBpZiBub3Qgd2FpdFxuICByZXR1cm4gbWVyZ2VTdGF0ZVJlc3VsdC5hbGxNZXJnZWRcbiAgICA/IHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQpXG4gICAgOiBtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlO1xufVxuXG4vKiogUmVhZHMgYG9wdGlvbnMubGF5ZXJWaXNDb25maWdgIGZyb20gYWRkLWRhdGEtdG8tbWFwIChzZWUgYEFkZERhdGFUb01hcE9wdGlvbnNgKS4gKi9cbmZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKFxuICBvcHRpb25zOiBQb3N0TWVyZ2VyUGF5bG9hZFsnb3B0aW9ucyddIHwgdW5kZWZpbmVkXG4pOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucyB8fCAhKCdsYXllclZpc0NvbmZpZycgaW4gb3B0aW9ucykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHBhdGNoID0gKG9wdGlvbnMgYXMge2xheWVyVmlzQ29uZmlnPzogdW5rbm93bn0pLmxheWVyVmlzQ29uZmlnO1xuICBpZiAocGF0Y2ggPT0gbnVsbCB8fCB0eXBlb2YgcGF0Y2ggIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0Y2ggYXMgUGFydGlhbDxMYXllclZpc0NvbmZpZz47XG59XG5cbi8qKlxuICogUG9seWdvbiBmaWx0ZXJzIGZvciB0aGVzZSBsYXllcnMgdXNlIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUgZnJvbVxuICogY2FsY3VsYXRlTGF5ZXJEYXRhLiBPdGhlciB0eXBlcyAobGF0L2xuZyBwb2ludHMsIEgzLCBhcmNzKSBjYW4gZmlsdGVyXG4gKiBmcm9tIGNvbHVtbnMgb24gdGhlIGZpcnN0IHBhc3MgYW5kIG11c3Qgbm90IGJlIHJlY2FsY3VsYXRlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gTEFZRVJfVFlQRVMuZ2VvanNvbiB8fCBsYXllci5jb25maWc/LmNvbHVtbk1vZGUgPT09ICdnZW9qc29uJztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqL1xuZnVuY3Rpb24gcG9zdE1lcmdlVXBkYXRlcihtZXJnZWRTdGF0ZTogVmlzU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZCk6IFZpc1N0YXRlIHtcbiAgY29uc3Qge25ld0RhdGFJZHMsIG9wdGlvbnMsIGxheWVyTWVyZ2Vyc30gPSBwb3N0TWVyZ2VyUGF5bG9hZDtcbiAgY29uc3QgbmV3RmlsdGVycyA9IG1lcmdlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT5cbiAgICBmLmRhdGFJZC5maW5kKGZEYXRhSWQgPT4gbmV3RGF0YUlkcy5pbmNsdWRlcyhmRGF0YUlkKSlcbiAgKTtcbiAgY29uc3QgZGF0YXNldEZpbHRlcmVkOiBzdHJpbmdbXSA9IHVuaXEoXG4gICAgbmV3RmlsdGVycy5yZWR1Y2UoKGFjY3UsIGYpID0+IFsuLi5hY2N1LCAuLi5mLmRhdGFJZF0sIFtdIGFzIHN0cmluZ1tdKVxuICApO1xuICBjb25zdCBkYXRhRW1wdHkgPSBuZXdEYXRhSWRzLmxlbmd0aCA8IDE7XG5cbiAgbGV0IG5ld0xheWVycyA9ICFkYXRhRW1wdHlcbiAgICA/IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpKVxuICAgIDogW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSBuZXdEYXRhSWRzLnJlZHVjZShcbiAgICAoYWNjdSwgaWQpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2lkXTogbWVyZ2VkU3RhdGUuZGF0YXNldHNbaWRdXG4gICAgfSksXG4gICAge31cbiAgKTtcblxuICBpZiAoIW5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmF1dG9DcmVhdGVMYXllcnMgIT09IGZhbHNlKSB7XG4gICAgLy8gbm8gbGF5ZXIgbWVyZ2VkLCBmaW5kIGRlZmF1bHRzXG4gICAgY29uc3QgcmVzdWx0ID0gYWRkRGVmYXVsdExheWVycyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXMpO1xuICAgIG1lcmdlZFN0YXRlID0gcmVzdWx0LnN0YXRlO1xuICAgIG5ld0xheWVycyA9IHJlc3VsdC5uZXdMYXllcnM7XG4gIH1cblxuICBpZiAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIC8vIGlmIG1hcCBpcyBzcGxpdCwgYWRkIG5ldyBsYXllcnMgdG8gc3BsaXRNYXBzXG4gICAgbmV3TGF5ZXJzID0gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKVxuICAgICk7XG4gICAgLy8gYSBsYXllciBhbHJlYWR5IGluIGEgcGFuZWwgd2FzIG1lcmdlZCBmcm9tIHNwbGl0IG1hcHMsIHdoaWNoIGRlY2lkZSB0aGUgcGFuZWxzIHNob3dpbmcgaXRcbiAgICBjb25zdCBsYXllcnNOb3RJblNwbGl0TWFwcyA9IG5ld0xheWVycy5maWx0ZXIoXG4gICAgICBsID0+ICFtZXJnZWRTdGF0ZS5zcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycylcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBsYXllcnNOb3RJblNwbGl0TWFwcylcbiAgICB9O1xuICB9XG5cbiAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gICAgbWVyZ2VkU3RhdGUsXG4gICAgbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMob3B0aW9ucyksXG4gICAgbmV3RGF0YUlkc1xuICApO1xuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyBQb2x5Z29uIHBlci1sYXllciBpbmRleGVzIG5lZWQgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSwgd2hpY2ggYXJlIG9ubHlcbiAgLy8gcG9wdWxhdGVkIGJ5IHRoZSBsYXllci1kYXRhIHBhc3MgYWJvdmUuIFNraXAgZGF0YXNldHMgd2hvc2UgdGFyZ2V0ZWQgbGF5ZXJzXG4gIC8vIGFscmVhZHkgZmlsdGVyZWQgZnJvbSBjb2x1bW5zIChlLmcuIGxhdC9sbmcgcG9pbnRzKS5cbiAgY29uc3QgcG9seWdvbkZpbHRlcnMgPSB1cGRhdGVkU3RhdGUuZmlsdGVycy5maWx0ZXIoXG4gICAgZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2VcbiAgKTtcbiAgY29uc3QgcG9seWdvbk1ldGFEYXRhSWRzID0gdW5pcShcbiAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBsYXllciA9PlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICAgICAgcG9seWdvbkZpbHRlcnMuc29tZShmID0+IGYubGF5ZXJJZD8uaW5jbHVkZXMobGF5ZXIuaWQpKVxuICAgICAgKVxuICAgICAgLm1hcChsYXllciA9PiBsYXllci5jb25maWcuZGF0YUlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgdXBkYXRlZERhdGFzZXRzLmluY2x1ZGVzKGlkKSlcbiAgKTtcbiAgaWYgKHBvbHlnb25NZXRhRGF0YUlkcy5sZW5ndGgpIHtcbiAgICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEoXG4gICAgICB7XG4gICAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgICAgZGF0YXNldHM6IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgICAgICAgcG9seWdvbk1ldGFEYXRhSWRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZmlsdGVycyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUubGF5ZXJzXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBwb2x5Z29uTWV0YURhdGFJZHNcbiAgICApO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpbixcbiAgLy8gbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgbGF5ZXIgZGF0YSBpcyBjYWxjdWxhdGVkXG4gIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbih1cGRhdGVkU3RhdGUpO1xuXG4gIC8vIHRyeSB0byBwcm9jZXNzIGxheWVyTWVyZ2VycyBhZnRlciBkYXRhc2V0K2RhdGFzZXRNZXJnZXJzXG4gIHVwZGF0ZWRTdGF0ZSA9XG4gICAgbGF5ZXJNZXJnZXJzICYmIGxheWVyTWVyZ2Vycy5sZW5ndGggPiAwXG4gICAgICA/IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIodXBkYXRlZFN0YXRlLCB7XG4gICAgICAgICAgbWVyZ2VyczogbGF5ZXJNZXJnZXJzLFxuICAgICAgICAgIHBvc3RNZXJnZXJQYXlsb2FkOiB7Li4ucG9zdE1lcmdlclBheWxvYWQsIGxheWVyTWVyZ2VyczogW119XG4gICAgICAgIH0pXG4gICAgICA6IHVwZGF0ZWRTdGF0ZTtcblxuICAvLyBjZW50ZXIgdGhlIG1hcCBvbmNlIHRoZSBkYXRhc2V0IGlzIGNyZWF0ZWRcbiAgaWYgKG5ld0xheWVycy5sZW5ndGggJiYgKG9wdGlvbnMgfHwge30pLmNlbnRlck1hcCkge1xuICAgIGNvbnN0IGJvdW5kcyA9IGZpbmRNYXBCb3VuZHMobmV3TGF5ZXJzKTtcbiAgICBpZiAoYm91bmRzKSB7XG4gICAgICBjb25zdCBwYWRkaW5nID0gb3B0aW9ucz8ucGFkZGluZztcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PlxuICAgICAgdGwuZmllbGQgJiYgcmVuYW1lc1t0bC5maWVsZC5uYW1lXVxuICAgICAgICA/IHsuLi50bCwgZmllbGQ6IHsuLi50bC5maWVsZCwgbmFtZTogcmVuYW1lc1t0bC5maWVsZC5uYW1lXX19XG4gICAgICAgIDogdGxcbiAgICApO1xuICAgIGlmICh0ZXh0TGFiZWwuc29tZSgodGwsIGkpID0+IHRsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2ldKSkge1xuICAgICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gdGV4dExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmFtZSkgPiAtMSk7XG5cbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IFNldChuZXdUYWJsZS5maWVsZHMubWFwKGYgPT4gZi5uYW1lKSk7XG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuXG4gIC8vIDIuIHJlY29uY2lsZSBmaWx0ZXJzXG4gIGxldCBuZXdGaWx0ZXJzID0gc3RhdGUuZmlsdGVyc1xuICAgIC5tYXAoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IHZpID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFJZCk7XG4gICAgICBpZiAodmkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID09PSAtMSkge1xuICAgICAgICAvLyBjb2x1bW4gaXMgZ29uZTogZHJvcCBhIHNpbmdsZS1kYXRhc2V0IGZpbHRlciwgc3BsaWNlIGl0IG91dCBvZiBhIHN5bmNlZCBvbmVcbiAgICAgICAgcmV0dXJuIGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29sdW1uIHByZXNlbnQgKHBvc3NpYmx5IHJlbmFtZWQpOiByZS1yZXNvbHZlIG5hbWUvZmllbGRJZHgvZG9tYWluXG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIGJydXNoIGZpbHRlcnMgY2FycnkgYSBzZWNvbmQgeS1heGlzIGZpZWxkOyBmb2xsb3cgYSByZW5hbWUgdGhlcmUgdG9vXG4gICAgICBjb25zdCB5QXhpcyA9XG4gICAgICAgIHVwZGF0ZWQueUF4aXM/Lm5hbWUgJiZcbiAgICAgICAgKHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXVxuICAgICAgICAgID8gey4uLnVwZGF0ZWQueUF4aXMsIG5hbWU6IHJlbmFtZXNbdXBkYXRlZC55QXhpcy5uYW1lXX1cbiAgICAgICAgICA6IG5ld0ZpZWxkc0J5TmFtZS5oYXModXBkYXRlZC55QXhpcy5uYW1lKVxuICAgICAgICAgID8gdXBkYXRlZC55QXhpc1xuICAgICAgICAgIDogbnVsbCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAgIHlBeGlzLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIHJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZFxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDMuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIChncHVGaWx0ZXIgLyBmaWx0ZXJSZWNvcmQgLyBmaWx0ZXJlZEluZGV4KVxuICBuZXdUYWJsZS5maWx0ZXJUYWJsZShcbiAgICBuZXdGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCksXG4gICAge31cbiAgKTtcblxuICAvLyA0LiByZWNvbmNpbGUgbGF5ZXJzXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllcnMgPSBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IHJlY29uY2lsZWQgPSByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEobGF5ZXIsIHJlbmFtZXMsIG5ld1RhYmxlLCBzdGF0ZSk7XG4gICAgaWYgKHJlY29uY2lsZWQpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVkO1xuICAgIH1cbiAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyLmlkKTtcbiAgICByZXR1cm4gbGF5ZXI7IC8vIHBsYWNlaG9sZGVyLCBkcm9wcGVkIHZpYSByZW1vdmVMYXllclVwZGF0ZXIgYmVsb3dcbiAgfSk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHMsXG4gICAgZmlsdGVyczogbmV3RmlsdGVycyxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIC8vIDYuIGRyb3AgbGF5ZXJzIHRoYXQgbG9zdCB0aGVpciByZXF1aXJlZCBjb2x1bW5zXG4gIG5leHRTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwgbmV4dFN0YXRlKTtcblxuICAvLyA3LiByZWNvbXB1dGUgbGF5ZXIgZG9tYWlucyArIGRhdGEgZm9yIHRoZSB1cGRhdGVkIGRhdGFzZXRcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IEFycmF5LmZyb20oZmlsZXMpO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IGdldEZpbGVzVG9QYXJzZShjb21wYW5pb25GaWxlcyk7XG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGZpbGVzVG9Mb2FkLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWRcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKFxuICBmaWxlLFxuICBmaWxlQ2FjaGUsXG4gIGxvYWRlcnM6IExvYWRlcltdID0gW10sXG4gIGxvYWRPcHRpb25zID0ge30sXG4gIGNvbXBhbmlvbkZpbGVzPzogRmlsZVtdXG4pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zLCBjb21wYW5pb25GaWxlc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2h9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLkV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZlYXR1cmUgPSBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVyPy5jb25maWcuZGF0YUlkO1xuICBsZXQgZGF0YXNldCA9IGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiBudWxsO1xuXG4gIGlmICghbGF5ZXIgfHwgIWRhdGFzZXQgfHwgIWRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEdQVSByYW5nZS90aW1lIGZpbHRlcnMgYXJlIG5vdCByZWZsZWN0ZWQgaW4gZmlsdGVyZWRJbmRleDsgZXZhbHVhdGUgdGhlbSBvbiBDUFVcbiAgLy8gdGhlIHNhbWUgd2F5IGV4cG9ydCBkYXRhIGRvZXMsIHRoZW4gY2xpcCB0aGUgcmVzdWx0IHRvIHRoZSBkcmF3aW5nLlxuICBpZiAoIWlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyLlxuICAgIC8vIEtlZXAgdGhlIG9uZXMgb2YgYSBkYXRhc2V0IHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kIG5vdCBtZXJnZWQgYmFjayB5ZXQ6XG4gICAgLy8gaXRzIGxheWVycyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBjdXJyZW50IHNwbGl0IG1hcHMuXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChcbiAgICAgIHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsXG4gICAgICBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXVxuICAgICk7XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVGhlIG9yZGVyIHRvIHByZXNlcnZlIGZvciB0aGUgaXRlbXMgdGhhdCB3aWxsIGJlIG1lcmdlZCBiYWNrLlxuICpcbiAqIGBpZHNgIGNvbWVzIGZyb20gdGhlIHNlcmlhbGl6ZWQgc3RhdGUsIHNvIGl0IGxpc3RzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBpdGVtc1xuICogYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbzogYW4gYXBwIHJlZnJlc2hpbmcgc2V2ZXJhbFxuICogZGF0YXNldHMgaW4gYSByb3cgcHJlcGFyZXMgdGhlIHNlY29uZCByZXBsYWNlbWVudCBiZWZvcmUgdGhlIGZpcnN0IG9uZSdzXG4gKiBpdGVtcyBoYXZlIG1lcmdlZCBiYWNrLiBXcml0aW5nIGBpZHNgIGFzIGl0IGlzIHdvdWxkIGRyb3AgdGhvc2UsIGFuZFxuICogYGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXJgIHB1dHMgYW4gaXRlbSBpdCBjYW5ub3QgcGxhY2UgYXQgdGhlIGZyb250IOKAlFxuICogc28gdGhleSB3b3VsZCBjb21lIGJhY2sgcmV2ZXJzZWQuIFdoZXJlIHRoZXkgYmVsb25nIGlzIHdoYXQgdGhlIG9yZGVyIHdyaXR0ZW5cbiAqIHdoZW4gdGhleSB3ZXJlIHBhcmtlZCBhbHJlYWR5IHNheXMsIHNvIHRoYXQgb3JkZXIgaXMga2VwdCBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgcHJldmlvdXNPcmRlcjogc3RyaW5nW10gPSBbXSxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgcGFya2VkOiB7aWQ/OiBzdHJpbmd9W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFya2VkSWRzID0gcGFya2VkXG4gICAgLm1hcChpdGVtID0+IGl0ZW0/LmlkKVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmICFpZHMuaW5jbHVkZXMoaWQgYXMgc3RyaW5nKSk7XG5cbiAgaWYgKCFwYXJrZWRJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbLi4uaWRzLCAuLi5wYXJrZWRJZHNdKTtcbiAgY29uc3Qgb3JkZXJlZCA9IChwcmV2aW91c09yZGVyIHx8IFtdKS5maWx0ZXIoaWQgPT4ga25vd24uaGFzKGlkKSk7XG4gIGNvbnN0IHJlc3QgPSBbLi4uaWRzLCAuLi5wYXJrZWRJZHNdLmZpbHRlcihpZCA9PiAhb3JkZXJlZC5pbmNsdWRlcyhpZCkpO1xuXG4gIHJldHVybiBbLi4ub3JkZXJlZCwgLi4ucmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdoYXQgYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbyBhbmQgaGFzIG5vdFxuICAgICAgICAvLyBtZXJnZWQgYmFjayB5ZXQsIHJlYWQgYmVmb3JlIHRoaXMgb25lIHBhcmtzIGFueXRoaW5nIG9mIGl0cyBvd24uXG4gICAgICAgIGNvbnN0IHBhcmtlZEVsc2V3aGVyZSA9XG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRvQXJyYXkocmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXSA/PyBbXSlcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gICAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdLFxuICAgICAgICAgICAgcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpLFxuICAgICAgICAgICAgcGFya2VkRWxzZXdoZXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQVdBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQWdD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LEtBQUFxcEMsc0JBQUEsR0FDdkNGLGFBQWEsQ0FBQ0csYUFBYSxDQUFDM2tCLFdBQVcsQ0FBQyxjQUFBMGtCLHNCQUFBLGVBQXhDQSxzQkFBQSxDQUEwQ3J1QyxNQUFNLElBQ2hEZ3VDLGFBQWEsRUFDYjtRQUNBRyxhQUFhLENBQUNILGFBQWEsQ0FBQyxHQUFHWix3QkFBd0IsQ0FDckRlLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDLEVBQzVCNUIsU0FBUyxDQUFDdmtDLEdBQUcsQ0FBQyxVQUFBaTZCLElBQUk7VUFBQSxPQUFJQSxJQUFJLENBQUM1L0IsRUFBRTtRQUFBLEVBQUMsRUFDOUJxc0MsZUFDRixDQUFDO01BQ0g7SUFDRixDQUFDLENBQUM7SUFFRixPQUFPSixhQUFhO0VBQ3RCLENBQUMsRUFDRDFtQyxLQUNGLENBQUM7RUFFRCxPQUFPdUMsU0FBUztBQUNsQjtBQUVBLFNBQVN5a0MsdUJBQXVCQSxDQUM5QmhuQyxLQUFLLEVBQ0wrbUMsWUFBWSxFQUFBRSxNQUFBLEVBRVo7RUFBQSxJQURDdmpDLElBQUksR0FBQXVqQyxNQUFBLENBQUp2akMsSUFBSTtJQUFFd2UsV0FBVyxHQUFBK2tCLE1BQUEsQ0FBWC9rQixXQUFXO0lBQUVva0Isa0JBQWtCLEdBQUFXLE1BQUEsQ0FBbEJYLGtCQUFrQjtJQUFFN0IsWUFBWSxHQUFBd0MsTUFBQSxDQUFaeEMsWUFBWTtFQUVwRDtFQUNBO0VBQ0EsSUFBSWxpQyxTQUFTLEdBQUcraEMsbUJBQW1CLENBQUN0a0MsS0FBSyxFQUFFK21DLFlBQVksRUFBRTtJQUFDcmpDLElBQUksRUFBSkEsSUFBSTtJQUFFd2UsV0FBVyxFQUFYQSxXQUFXO0lBQUV1aUIsWUFBWSxFQUFaQTtFQUFZLENBQUMsQ0FBQztFQUMzRixJQUFNSixZQUFZLEdBQUcsQ0FBQWlDLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUdTLFlBQVksQ0FBQyxLQUFJNUMsbUJBQW1CLENBQUM0QyxZQUFZLENBQUM7RUFFNUYsSUFBSTFDLFlBQVksRUFBRTtJQUNoQjloQyxTQUFTLEdBQUcsSUFBQXFMLG9CQUFPLEVBQUN5MkIsWUFBWSxDQUFDLENBQUMvM0IsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTI2QixXQUFXLEVBQUs7TUFDOUQ7TUFDQTtNQUNBLE9BQU9wQyxxQkFBcUIsQ0FBQ3Y0QixJQUFJLEVBQUUyNkIsV0FBVyxFQUFFQSxXQUFXLENBQUM7SUFDOUQsQ0FBQyxFQUFFM2tDLFNBQVMsQ0FBQztFQUNmO0VBQ0EsT0FBT0EsU0FBUztBQUNsQiIsImlnbm9yZUxpc3QiOltdfQ==