@kepler.gl/reducers 3.3.0-alpha.13 → 3.3.0-alpha.15

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;
@@ -47,13 +47,14 @@ exports.nextFileBatchUpdater = exports.mouseMoveUpdater = exports.mapClickUpdate
47
47
  exports.parseProgress = parseProgress;
48
48
  exports.pinTableColumnUpdater = pinTableColumnUpdater;
49
49
  exports.prepareStateForDatasetReplace = prepareStateForDatasetReplace;
50
+ exports.preservedOrderWithParked = preservedOrderWithParked;
50
51
  exports.processFileContentUpdater = processFileContentUpdater;
51
52
  exports.receiveMapConfigUpdater = void 0;
52
53
  exports.refreshDatasetErrorUpdater = refreshDatasetErrorUpdater;
53
54
  exports.refreshDatasetProgressUpdater = refreshDatasetProgressUpdater;
54
55
  exports.refreshDatasetSuccessUpdater = refreshDatasetSuccessUpdater;
55
56
  exports.refreshDatasetUpdater = refreshDatasetUpdater;
56
- exports.removeAnnotationUpdater = void 0;
57
+ exports.removeChartUpdater = exports.removeAnnotationUpdater = void 0;
57
58
  exports.removeDatasetUpdater = removeDatasetUpdater;
58
59
  exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
59
60
  exports.removeFromDatasetUpdater = removeFromDatasetUpdater;
@@ -76,10 +77,13 @@ exports.setFilterUpdater = setFilterUpdater;
76
77
  exports.setFilterViewUpdater = void 0;
77
78
  exports.setInitialLayerConfig = setInitialLayerConfig;
78
79
  exports.setLayerAnimationTimeConfigUpdater = setLayerAnimationTimeConfigUpdater;
79
- exports.setMapInfoUpdater = exports.setLoadingIndicatorUpdater = exports.setLayerAnimationTimeUpdater = void 0;
80
+ exports.setLoadingIndicatorUpdater = exports.setLayerAnimationTimeUpdater = void 0;
81
+ exports.setLoadingProgressUpdater = setLoadingProgressUpdater;
82
+ exports.setMapInfoUpdater = void 0;
80
83
  exports.setPolygonFilterAllLayersUpdater = setPolygonFilterAllLayersUpdater;
81
84
  exports.setPolygonFilterLayerUpdater = setPolygonFilterLayerUpdater;
82
- exports.setSelectedFeatureUpdater = exports.setSelectedAnnotationUpdater = void 0;
85
+ exports.setSelectedAnnotationUpdater = void 0;
86
+ exports.setSelectedFeatureUpdater = void 0;
83
87
  exports.setTimeFilterTimelineModeUpdater = setTimeFilterTimelineModeUpdater;
84
88
  exports.showDatasetTableUpdater = void 0;
85
89
  exports.sortTableColumnUpdater = sortTableColumnUpdater;
@@ -89,7 +93,7 @@ exports.toggleEditorVisibilityUpdater = toggleEditorVisibilityUpdater;
89
93
  exports.toggleSplitMapUpdater = exports.toggleLayerForMapUpdater = exports.toggleLayerAnimationUpdater = exports.toggleLayerAnimationControlUpdater = exports.toggleFilterFeatureUpdater = exports.toggleFilterAnimationUpdater = void 0;
90
94
  exports.updateAllLayerDomainData = updateAllLayerDomainData;
91
95
  exports.updateAnimationDomain = updateAnimationDomain;
92
- exports.updateAnnotationUpdater = void 0;
96
+ exports.updateChartUpdater = exports.updateAnnotationUpdater = void 0;
93
97
  exports.updateDatasetPropsUpdater = updateDatasetPropsUpdater;
94
98
  exports.updateDatasetUpdater = updateDatasetUpdater;
95
99
  exports.updateEffectUpdater = void 0;
@@ -274,6 +278,9 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
274
278
  // effects
275
279
  effects: [],
276
280
  effectOrder: [],
281
+ // charts (enabled by default; gated by enableChartsPanel)
282
+ charts: [],
283
+ chartsToBeMerged: [],
277
284
  // annotations
278
285
  annotations: [],
279
286
  annotationsToBeMerged: [],
@@ -309,6 +316,7 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
309
316
  fileLoadingProgress: {},
310
317
  // for loading datasets
311
318
  loadingIndicatorValue: 0,
319
+ loadingProgress: {},
312
320
  loaders: [],
313
321
  loadOptions: {},
314
322
  // visStateMergers
@@ -382,9 +390,9 @@ function applyLayerConfigUpdater(state, action) {
382
390
  var oldLayerId = action.oldLayerId,
383
391
  newLayerConfig = action.newLayerConfig,
384
392
  layerIndex = action.layerIndex;
385
- var newParsedLayer =
386
- // will move visualChannels to the config prop
387
- (0, _visStateMerger.parseLayerConfig)(state.schema, newLayerConfig);
393
+ // Saved configs have a visualChannels sibling; parsed/editor JSON folds those
394
+ // fields into config. Re-parsing the latter drops colorField and resets the scale.
395
+ var newParsedLayer = (0, _visStateMerger.isSavedLayerConfigV1)(newLayerConfig) ? (0, _visStateMerger.parseLayerConfig)(state.schema, newLayerConfig) : newLayerConfig;
388
396
  var oldLayer = state.layers.find(function (l) {
389
397
  return l.id === oldLayerId;
390
398
  });
@@ -1791,7 +1799,9 @@ function removeLayerUpdater(state, _ref9) {
1791
1799
  splitMaps: (0, _utils.removeLayerFromSplitMaps)(state.splitMaps, layerToRemove)
1792
1800
  // TODO: update filters, create helper to remove layer form filter (remove layerid and dataid) if mapped
1793
1801
  });
1794
- return updateAnimationDomain(newState);
1802
+ return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
1803
+ return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
1804
+ }));
1795
1805
  }
1796
1806
 
1797
1807
  /**
@@ -2242,16 +2252,169 @@ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpd
2242
2252
  effectOrder: effectOrder
2243
2253
  });
2244
2254
  };
2255
+ function isLayerChartConfig(chart) {
2256
+ return chart.type === 'layerChart';
2257
+ }
2258
+ function mergeChartConfig(chart, props) {
2259
+ return _objectSpread(_objectSpread(_objectSpread({}, chart), props), {}, {
2260
+ display: _objectSpread(_objectSpread({}, chart.display), props.display || {}),
2261
+ chartDisplay: _objectSpread(_objectSpread({}, chart.chartDisplay), props.chartDisplay || {})
2262
+ });
2263
+ }
2264
+ function axisFieldIfPresent(axis, fieldNames) {
2265
+ var _axis$field;
2266
+ if (!(axis !== null && axis !== void 0 && (_axis$field = axis.field) !== null && _axis$field !== void 0 && _axis$field.name) || fieldNames.has(axis.field.name)) {
2267
+ return axis;
2268
+ }
2269
+ return _objectSpread(_objectSpread({}, axis), {}, {
2270
+ field: null,
2271
+ title: null
2272
+ });
2273
+ }
2274
+ function dropMissingChartFields(chart, dataset) {
2275
+ var fieldNames = new Set(((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).map(function (field) {
2276
+ return field.name;
2277
+ }));
2278
+ var next = chart;
2279
+ return mergeChartConfig(chart, {
2280
+ xAxis: axisFieldIfPresent(next.xAxis, fieldNames),
2281
+ yAxis: axisFieldIfPresent(next.yAxis, fieldNames),
2282
+ axis: axisFieldIfPresent(next.axis, fieldNames),
2283
+ groupBy: axisFieldIfPresent(next.groupBy, fieldNames),
2284
+ value: axisFieldIfPresent(next.value, fieldNames)
2285
+ });
2286
+ }
2287
+ function removeChartsAndFilters(state, shouldRemove) {
2288
+ var charts = state.charts || [];
2289
+ var removed = charts.filter(shouldRemove);
2290
+ if (!removed.length) {
2291
+ return state;
2292
+ }
2293
+ var removedIds = new Set(removed.map(function (chart) {
2294
+ return chart.id;
2295
+ }));
2296
+ var filterIds = new Set(removed.flatMap(function (chart) {
2297
+ var _chart$crossFilter;
2298
+ var id = (_chart$crossFilter = chart.crossFilter) === null || _chart$crossFilter === void 0 ? void 0 : _chart$crossFilter.filterId;
2299
+ return id ? [id, "".concat(id, "-x"), "".concat(id, "-y")] : [];
2300
+ }));
2301
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2302
+ charts: charts.filter(function (chart) {
2303
+ return !removedIds.has(chart.id);
2304
+ })
2305
+ });
2306
+ if (filterIds.size) {
2307
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2308
+ return filterIds.has(filter.id) ? removeFilterUpdater(accu, {
2309
+ idx: idx
2310
+ }) : accu;
2311
+ }, nextState);
2312
+ }
2313
+ return nextState;
2314
+ }
2315
+
2316
+ /**
2317
+ * Add a chart
2318
+ * @memberof visStateUpdaters
2319
+ * @public
2320
+ */
2321
+ var addChartUpdater = exports.addChartUpdater = function addChartUpdater(state, _ref13) {
2322
+ var _chart$display$isConf, _chart$display;
2323
+ var chart = _ref13.chart;
2324
+ if (!(chart !== null && chart !== void 0 && chart.id)) {
2325
+ return state;
2326
+ }
2327
+ if ((state.charts || []).some(function (existing) {
2328
+ return existing.id === chart.id;
2329
+ })) {
2330
+ return state;
2331
+ }
2332
+ return _objectSpread(_objectSpread({}, state), {}, {
2333
+ charts: [].concat((0, _toConsumableArray2["default"])((state.charts || []).map(function (existing) {
2334
+ return _objectSpread(_objectSpread({}, existing), {}, {
2335
+ display: _objectSpread(_objectSpread({}, existing.display), {}, {
2336
+ isConfigActive: false
2337
+ })
2338
+ });
2339
+ })), [_objectSpread(_objectSpread({}, chart), {}, {
2340
+ display: _objectSpread(_objectSpread({}, chart.display), {}, {
2341
+ 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
2342
+ })
2343
+ })])
2344
+ });
2345
+ };
2346
+
2347
+ /**
2348
+ * Update a chart
2349
+ * @memberof visStateUpdaters
2350
+ * @public
2351
+ */
2352
+ var updateChartUpdater = exports.updateChartUpdater = function updateChartUpdater(state, _ref14) {
2353
+ var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
2354
+ var id = _ref14.id,
2355
+ props = _ref14.props;
2356
+ var idx = (state.charts || []).findIndex(function (chart) {
2357
+ return chart.id === id;
2358
+ });
2359
+ if (idx < 0) {
2360
+ return state;
2361
+ }
2362
+ var prev = state.charts[idx];
2363
+ var dataIdChanged = typeof props.dataId === 'string' && props.dataId !== prev.dataId;
2364
+ var layerIdChanged = isLayerChartConfig(prev) && typeof props.layerId === 'string' && props.layerId !== prev.layerId;
2365
+ var next = mergeChartConfig(prev, props);
2366
+ if (dataIdChanged || layerIdChanged) {
2367
+ var _next$crossFilter;
2368
+ var dataId = next.dataId || undefined;
2369
+ next = dropMissingChartFields(next, dataId ? state.datasets[dataId] : undefined);
2370
+ if ((_next$crossFilter = next.crossFilter) !== null && _next$crossFilter !== void 0 && _next$crossFilter.enabled) {
2371
+ next = mergeChartConfig(next, {
2372
+ crossFilter: _objectSpread(_objectSpread({}, next.crossFilter), {}, {
2373
+ enabled: false,
2374
+ value: {},
2375
+ fieldNames: {}
2376
+ })
2377
+ });
2378
+ }
2379
+ }
2380
+ var charts = (0, _toConsumableArray2["default"])(state.charts);
2381
+ charts[idx] = next;
2382
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2383
+ charts: charts
2384
+ });
2385
+ 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);
2386
+ 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) {
2387
+ var ownedFilterIds = new Set([filterId, "".concat(filterId, "-x"), "".concat(filterId, "-y")]);
2388
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2389
+ return ownedFilterIds.has(filter.id) ? removeFilterUpdater(accu, {
2390
+ idx: idx
2391
+ }) : accu;
2392
+ }, nextState);
2393
+ }
2394
+ return nextState;
2395
+ };
2396
+
2397
+ /**
2398
+ * Remove a chart and any cross-filter it owns
2399
+ * @memberof visStateUpdaters
2400
+ * @public
2401
+ */
2402
+ var removeChartUpdater = exports.removeChartUpdater = function removeChartUpdater(state, _ref15) {
2403
+ var id = _ref15.id;
2404
+ return removeChartsAndFilters(state, function (chart) {
2405
+ return chart.id === id;
2406
+ });
2407
+ };
2245
2408
 
2246
2409
  // ANNOTATION UPDATERS
2247
2410
 
2248
2411
  function makeNewAnnotation(config) {
2249
- 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;
2412
+ 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;
2250
2413
  var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : _constants.INITIAL_ANNOTATION_KIND;
2251
2414
  var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
2252
2415
  var derivedFromAngle = providedAngle != null ? (0, _constants.textPlacementFromAngle)(providedAngle) : undefined;
2253
- 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;
2254
- 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;
2416
+ 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;
2417
+ 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;
2255
2418
  var base = _objectSpread(_objectSpread(_objectSpread({
2256
2419
  id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : (0, _commonUtils.generateHashId)(6),
2257
2420
  kind: kind,
@@ -2320,8 +2483,8 @@ var addAnnotationUpdater = exports.addAnnotationUpdater = function addAnnotation
2320
2483
  * @memberof visStateUpdaters
2321
2484
  * @public
2322
2485
  */
2323
- var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
2324
- var id = _ref15.id;
2486
+ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref18) {
2487
+ var id = _ref18.id;
2325
2488
  return _objectSpread(_objectSpread({}, state), {}, {
2326
2489
  annotations: state.annotations.filter(function (a) {
2327
2490
  return a.id !== id;
@@ -2336,9 +2499,9 @@ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeA
2336
2499
  * @memberof visStateUpdaters
2337
2500
  * @public
2338
2501
  */
2339
- var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
2340
- var id = _ref16.id,
2341
- config = _ref16.config;
2502
+ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref19) {
2503
+ var id = _ref19.id,
2504
+ config = _ref19.config;
2342
2505
  var idx = state.annotations.findIndex(function (a) {
2343
2506
  return a.id === id;
2344
2507
  });
@@ -2365,8 +2528,8 @@ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateA
2365
2528
  * @memberof visStateUpdaters
2366
2529
  * @public
2367
2530
  */
2368
- var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
2369
- var id = _ref17.id;
2531
+ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref20) {
2532
+ var id = _ref20.id;
2370
2533
  var original = state.annotations.find(function (a) {
2371
2534
  return a.id === id;
2372
2535
  });
@@ -2390,9 +2553,9 @@ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function d
2390
2553
  * @memberof visStateUpdaters
2391
2554
  * @public
2392
2555
  */
2393
- var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
2394
- var id = _ref18.id,
2395
- isEditingText = _ref18.isEditingText;
2556
+ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref21) {
2557
+ var id = _ref21.id,
2558
+ isEditingText = _ref21.isEditingText;
2396
2559
  if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2397
2560
  return state;
2398
2561
  }
@@ -2459,12 +2622,20 @@ function removeDatasetUpdater(state, action) {
2459
2622
  newState = _objectSpread(_objectSpread({}, newState), {}, {
2460
2623
  filters: filters
2461
2624
  });
2462
- return removeDatasetFromInteractionConfig(newState, {
2625
+ return removeChartsAndFilters(removeDatasetFromInteractionConfig(newState, {
2463
2626
  dataId: datasetKey
2627
+ }), function (chart) {
2628
+ if (chart.dataId === datasetKey) {
2629
+ return true;
2630
+ }
2631
+ if (isLayerChartConfig(chart)) {
2632
+ return layersToRemove.includes(chart.layerId);
2633
+ }
2634
+ return false;
2464
2635
  });
2465
2636
  }
2466
- function removeDatasetFromInteractionConfig(state, _ref19) {
2467
- var dataId = _ref19.dataId;
2637
+ function removeDatasetFromInteractionConfig(state, _ref22) {
2638
+ var dataId = _ref22.dataId;
2468
2639
  var interactionConfig = state.interactionConfig;
2469
2640
  var _interactionConfig = interactionConfig,
2470
2641
  tooltip = _interactionConfig.tooltip;
@@ -2549,12 +2720,12 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
2549
2720
  * @memberof visStateUpdaters
2550
2721
  * @public
2551
2722
  */
2552
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
2553
- var _ref20$payload = _ref20.payload,
2554
- _ref20$payload$config = _ref20$payload.config,
2555
- config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
2556
- _ref20$payload$option = _ref20$payload.options,
2557
- options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
2723
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
2724
+ var _ref23$payload = _ref23.payload,
2725
+ _ref23$payload$config = _ref23$payload.config,
2726
+ config = _ref23$payload$config === void 0 ? {} : _ref23$payload$config,
2727
+ _ref23$payload$option = _ref23$payload.options,
2728
+ options = _ref23$payload$option === void 0 ? {} : _ref23$payload$option;
2558
2729
  if (!config.visState) {
2559
2730
  return state;
2560
2731
  }
@@ -2659,8 +2830,8 @@ var mapClickUpdater = exports.mapClickUpdater = function mapClickUpdater(state,
2659
2830
  * @memberof visStateUpdaters
2660
2831
  * @public
2661
2832
  */
2662
- var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
2663
- var evt = _ref21.evt;
2833
+ var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref24) {
2834
+ var evt = _ref24.evt;
2664
2835
  if (Object.values(state.interactionConfig).some(function (config) {
2665
2836
  return config.enabled;
2666
2837
  })) {
@@ -2694,9 +2865,9 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
2694
2865
  * @memberof visStateUpdaters
2695
2866
  * @public
2696
2867
  */
2697
- var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
2698
- var mapIndex = _ref22.mapIndex,
2699
- layerId = _ref22.layerId;
2868
+ var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref25) {
2869
+ var mapIndex = _ref25.mapIndex,
2870
+ layerId = _ref25.layerId;
2700
2871
  var splitMaps = state.splitMaps;
2701
2872
  return _objectSpread(_objectSpread({}, state), {}, {
2702
2873
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2718,33 +2889,35 @@ function hydrateExternallyHostedProtoDataset(_x) {
2718
2889
  return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
2719
2890
  }
2720
2891
  function _hydrateExternallyHostedProtoDataset() {
2721
- _hydrateExternallyHostedProtoDataset = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(dataset) {
2722
- var _dataset$metadata6, _dataset$metadata7;
2723
- var loaded, _dataset$metadata8;
2892
+ _hydrateExternallyHostedProtoDataset = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref26) {
2893
+ var _dataset$metadata7, _dataset$metadata8;
2894
+ var dataset, onProgress, loaded, _dataset$metadata9;
2724
2895
  return _regenerator["default"].wrap(function _callee2$(_context2) {
2725
2896
  while (1) switch (_context2.prev = _context2.next) {
2726
2897
  case 0:
2898
+ dataset = _ref26.arg, onProgress = _ref26.onProgress;
2727
2899
  if (needsExternallyHostedHydrate(dataset)) {
2728
- _context2.next = 2;
2900
+ _context2.next = 3;
2729
2901
  break;
2730
2902
  }
2731
2903
  return _context2.abrupt("return", dataset);
2732
- case 2:
2733
- _context2.next = 4;
2904
+ case 3:
2905
+ _context2.next = 5;
2734
2906
  return (0, _processors.loadExternallyHostedDataset)({
2735
- source: (_dataset$metadata6 = dataset.metadata) === null || _dataset$metadata6 === void 0 ? void 0 : _dataset$metadata6.source,
2907
+ source: (_dataset$metadata7 = dataset.metadata) === null || _dataset$metadata7 === void 0 ? void 0 : _dataset$metadata7.source,
2736
2908
  format: (0, _constants.getRemoteSourceFormat)(dataset.metadata),
2737
- size: typeof ((_dataset$metadata7 = dataset.metadata) === null || _dataset$metadata7 === void 0 ? void 0 : _dataset$metadata7.size) === 'number' ? dataset.metadata.size : undefined,
2738
- bypassCache: (0, _constants.getDatasetRefreshIntervalMs)(dataset.metadata) > 0
2909
+ size: typeof ((_dataset$metadata8 = dataset.metadata) === null || _dataset$metadata8 === void 0 ? void 0 : _dataset$metadata8.size) === 'number' ? dataset.metadata.size : undefined,
2910
+ bypassCache: (0, _constants.getDatasetRefreshIntervalMs)(dataset.metadata) > 0,
2911
+ onProgress: onProgress
2739
2912
  });
2740
- case 4:
2913
+ case 5:
2741
2914
  loaded = _context2.sent;
2742
2915
  if (loaded.data) {
2743
- _context2.next = 7;
2916
+ _context2.next = 8;
2744
2917
  break;
2745
2918
  }
2746
- throw new Error("No data loaded from ".concat((_dataset$metadata8 = dataset.metadata) === null || _dataset$metadata8 === void 0 ? void 0 : _dataset$metadata8.source));
2747
- case 7:
2919
+ throw new Error("No data loaded from ".concat((_dataset$metadata9 = dataset.metadata) === null || _dataset$metadata9 === void 0 ? void 0 : _dataset$metadata9.source));
2920
+ case 8:
2748
2921
  return _context2.abrupt("return", _objectSpread(_objectSpread({}, dataset), {}, {
2749
2922
  data: loaded.data,
2750
2923
  metadata: _objectSpread(_objectSpread(_objectSpread({}, dataset.metadata), {}, {
@@ -2757,7 +2930,7 @@ function _hydrateExternallyHostedProtoDataset() {
2757
2930
  refreshStatus: 'idle'
2758
2931
  })
2759
2932
  }));
2760
- case 8:
2933
+ case 9:
2761
2934
  case "end":
2762
2935
  return _context2.stop();
2763
2936
  }
@@ -2765,9 +2938,9 @@ function _hydrateExternallyHostedProtoDataset() {
2765
2938
  }));
2766
2939
  return _hydrateExternallyHostedProtoDataset.apply(this, arguments);
2767
2940
  }
2768
- var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromise(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
2941
+ var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithProgress(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
2769
2942
  var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/function () {
2770
- var _ref23 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
2943
+ var _ref27 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(message) {
2771
2944
  return _regenerator["default"].wrap(function _callee$(_context) {
2772
2945
  while (1) switch (_context.prev = _context.next) {
2773
2946
  case 0:
@@ -2779,18 +2952,57 @@ var FAIL_CREATE_DATASET_TASK = _tasks["default"].fromPromise(/*#__PURE__*/functi
2779
2952
  }, _callee);
2780
2953
  }));
2781
2954
  return function (_x2) {
2782
- return _ref23.apply(this, arguments);
2955
+ return _ref27.apply(this, arguments);
2783
2956
  };
2784
2957
  }(), 'FAIL_CREATE_DATASET_TASK');
2958
+ function getDatasetProgressId(dataset) {
2959
+ var _dataset$info2, _dataset$metadata2;
2960
+ var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2961
+ if (typeof ((_dataset$info2 = dataset.info) === null || _dataset$info2 === void 0 ? void 0 : _dataset$info2.id) === 'string' && dataset.info.id) {
2962
+ return dataset.info.id;
2963
+ }
2964
+ if (typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) === 'string' && dataset.metadata.source) {
2965
+ return dataset.metadata.source;
2966
+ }
2967
+ return "dataset-".concat(index);
2968
+ }
2785
2969
  function createNewDataEntryTask(dataset, datasets) {
2786
2970
  if (!needsExternallyHostedHydrate(dataset)) {
2787
2971
  return (0, _table.createNewDataEntry)(dataset, datasets);
2788
2972
  }
2789
- return HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK(dataset).chain(function (hydrated) {
2973
+ var progressId = getDatasetProgressId(dataset);
2974
+ return HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK({
2975
+ arg: dataset,
2976
+ onProgress: function onProgress(progress) {
2977
+ var _progress$percent;
2978
+ return (0, _actions.setLoadingProgress)(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
2979
+ }
2980
+ }).chain(function (hydrated) {
2790
2981
  var task = (0, _table.createNewDataEntry)(hydrated, datasets);
2791
2982
  return task || FAIL_CREATE_DATASET_TASK('Failed to create a new dataset due to data verification errors');
2792
2983
  });
2793
2984
  }
2985
+ function clearLoadingProgress(state, ids) {
2986
+ var current = state.loadingProgress || {};
2987
+ if (!Object.keys(current).length) {
2988
+ return state;
2989
+ }
2990
+ if ((state.loadingIndicatorValue || 0) <= 0) {
2991
+ return _objectSpread(_objectSpread({}, state), {}, {
2992
+ loadingProgress: {}
2993
+ });
2994
+ }
2995
+ if (!(ids !== null && ids !== void 0 && ids.length)) {
2996
+ return state;
2997
+ }
2998
+ var next = _objectSpread({}, current);
2999
+ ids.forEach(function (id) {
3000
+ delete next[id];
3001
+ });
3002
+ return _objectSpread(_objectSpread({}, state), {}, {
3003
+ loadingProgress: next
3004
+ });
3005
+ }
2794
3006
  function patchDatasetMetadata(dataset, patch) {
2795
3007
  return (0, _table.copyTableAndUpdate)(dataset, {
2796
3008
  metadata: _objectSpread(_objectSpread({}, dataset.metadata), patch)
@@ -2800,12 +3012,12 @@ function refreshExternallyHostedTable(_x3) {
2800
3012
  return _refreshExternallyHostedTable.apply(this, arguments);
2801
3013
  }
2802
3014
  function _refreshExternallyHostedTable() {
2803
- _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref24) {
3015
+ _refreshExternallyHostedTable = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref28) {
2804
3016
  var metadata, onProgress;
2805
3017
  return _regenerator["default"].wrap(function _callee3$(_context3) {
2806
3018
  while (1) switch (_context3.prev = _context3.next) {
2807
3019
  case 0:
2808
- metadata = _ref24.arg, onProgress = _ref24.onProgress;
3020
+ metadata = _ref28.arg, onProgress = _ref28.onProgress;
2809
3021
  return _context3.abrupt("return", (0, _processors.loadExternallyHostedDataset)(_objectSpread(_objectSpread({}, metadata), {}, {
2810
3022
  onProgress: onProgress,
2811
3023
  bypassCache: true
@@ -2826,14 +3038,14 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = _tasks["default"].fromPromiseWithPr
2826
3038
  * @memberof visStateUpdaters
2827
3039
  * @public
2828
3040
  */
2829
- function refreshDatasetUpdater(state, _ref25) {
2830
- var _dataset$metadata2, _dataset$metadata3;
2831
- var dataId = _ref25.dataId;
3041
+ function refreshDatasetUpdater(state, _ref29) {
3042
+ var _dataset$metadata3, _dataset$metadata4;
3043
+ var dataId = _ref29.dataId;
2832
3044
  var dataset = state.datasets[dataId];
2833
- if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
3045
+ if (!dataset || dataset.type !== _constants.DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.source) !== 'string') {
2834
3046
  return state;
2835
3047
  }
2836
- if (((_dataset$metadata3 = dataset.metadata) === null || _dataset$metadata3 === void 0 ? void 0 : _dataset$metadata3.refreshStatus) === 'loading') {
3048
+ if (((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) === 'loading') {
2837
3049
  return state;
2838
3050
  }
2839
3051
  var nextDataset = patchDatasetMetadata(dataset, {
@@ -2852,8 +3064,8 @@ function refreshDatasetUpdater(state, _ref25) {
2852
3064
  lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
2853
3065
  },
2854
3066
  onProgress: function onProgress(progress) {
2855
- var _progress$percent;
2856
- return (0, _actions.refreshDatasetProgress)(dataId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
3067
+ var _progress$percent2;
3068
+ return (0, _actions.refreshDatasetProgress)(dataId, Math.round(((_progress$percent2 = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent2 !== void 0 ? _progress$percent2 : 0) * 100));
2857
3069
  }
2858
3070
  }).bimap(function (result) {
2859
3071
  return (0, _actions.refreshDatasetSuccess)(dataId, result);
@@ -2867,16 +3079,16 @@ function refreshDatasetUpdater(state, _ref25) {
2867
3079
  * @memberof visStateUpdaters
2868
3080
  * @public
2869
3081
  */
2870
- function refreshDatasetProgressUpdater(state, _ref26) {
2871
- var _dataset$metadata4, _dataset$metadata5;
2872
- var dataId = _ref26.dataId,
2873
- percent = _ref26.percent;
3082
+ function refreshDatasetProgressUpdater(state, _ref30) {
3083
+ var _dataset$metadata5, _dataset$metadata6;
3084
+ var dataId = _ref30.dataId,
3085
+ percent = _ref30.percent;
2874
3086
  var dataset = state.datasets[dataId];
2875
- if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
3087
+ if (!dataset || ((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshStatus) !== 'loading') {
2876
3088
  return state;
2877
3089
  }
2878
3090
  var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
2879
- if (((_dataset$metadata5 = dataset.metadata) === null || _dataset$metadata5 === void 0 ? void 0 : _dataset$metadata5.refreshProgress) === nextPercent) {
3091
+ if (((_dataset$metadata6 = dataset.metadata) === null || _dataset$metadata6 === void 0 ? void 0 : _dataset$metadata6.refreshProgress) === nextPercent) {
2880
3092
  return state;
2881
3093
  }
2882
3094
  return _objectSpread(_objectSpread({}, state), {}, {
@@ -2960,10 +3172,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
2960
3172
  * @memberof visStateUpdaters
2961
3173
  * @public
2962
3174
  */
2963
- function refreshDatasetSuccessUpdater(state, _ref27) {
3175
+ function refreshDatasetSuccessUpdater(state, _ref31) {
2964
3176
  var _result$data;
2965
- var dataId = _ref27.dataId,
2966
- result = _ref27.result;
3177
+ var dataId = _ref31.dataId,
3178
+ result = _ref31.result;
2967
3179
  var dataset = state.datasets[dataId];
2968
3180
  if (!dataset) {
2969
3181
  return state;
@@ -3057,10 +3269,10 @@ function normalizeDatasetRows(rows, fields) {
3057
3269
  * @memberof visStateUpdaters
3058
3270
  * @public
3059
3271
  */
3060
- function addToDatasetUpdater(state, _ref28) {
3061
- var dataId = _ref28.dataId,
3062
- rows = _ref28.rows,
3063
- options = _ref28.options;
3272
+ function addToDatasetUpdater(state, _ref32) {
3273
+ var dataId = _ref32.dataId,
3274
+ rows = _ref32.rows,
3275
+ options = _ref32.options;
3064
3276
  var dataset = state.datasets[dataId];
3065
3277
  if (!dataset) {
3066
3278
  return state;
@@ -3085,10 +3297,10 @@ function addToDatasetUpdater(state, _ref28) {
3085
3297
  * @memberof visStateUpdaters
3086
3298
  * @public
3087
3299
  */
3088
- function removeFromDatasetUpdater(state, _ref29) {
3089
- var dataId = _ref29.dataId,
3090
- rowIndexes = _ref29.rowIndexes,
3091
- byField = _ref29.byField;
3300
+ function removeFromDatasetUpdater(state, _ref33) {
3301
+ var dataId = _ref33.dataId,
3302
+ rowIndexes = _ref33.rowIndexes,
3303
+ byField = _ref33.byField;
3092
3304
  var dataset = state.datasets[dataId];
3093
3305
  if (!dataset) {
3094
3306
  return state;
@@ -3111,9 +3323,9 @@ function removeFromDatasetUpdater(state, _ref29) {
3111
3323
  * @memberof visStateUpdaters
3112
3324
  * @public
3113
3325
  */
3114
- function refreshDatasetErrorUpdater(state, _ref30) {
3115
- var dataId = _ref30.dataId,
3116
- error = _ref30.error;
3326
+ function refreshDatasetErrorUpdater(state, _ref34) {
3327
+ var dataId = _ref34.dataId,
3328
+ error = _ref34.error;
3117
3329
  var dataset = state.datasets[dataId];
3118
3330
  if (!dataset) {
3119
3331
  return state;
@@ -3153,13 +3365,18 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
3153
3365
  }
3154
3366
  var createDatasetTasks = [];
3155
3367
  var notificationTasks = [];
3156
- datasets.forEach(function (_ref31, datasetIndex) {
3157
- var _ref31$info = _ref31.info,
3158
- info = _ref31$info === void 0 ? {} : _ref31$info,
3159
- rest = (0, _objectWithoutProperties2["default"])(_ref31, _excluded2);
3160
- var task = createNewDataEntryTask(_objectSpread({
3368
+ var hydrateProgress = {};
3369
+ datasets.forEach(function (_ref35, datasetIndex) {
3370
+ var _ref35$info = _ref35.info,
3371
+ info = _ref35$info === void 0 ? {} : _ref35$info,
3372
+ rest = (0, _objectWithoutProperties2["default"])(_ref35, _excluded2);
3373
+ var proto = _objectSpread({
3161
3374
  info: info
3162
- }, rest), state.datasets);
3375
+ }, rest);
3376
+ if (needsExternallyHostedHydrate(proto)) {
3377
+ hydrateProgress[getDatasetProgressId(proto, datasetIndex)] = 0;
3378
+ }
3379
+ var task = createNewDataEntryTask(proto, state.datasets);
3163
3380
  if (task) {
3164
3381
  createDatasetTasks.push(task);
3165
3382
  } else {
@@ -3171,10 +3388,12 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
3171
3388
  }));
3172
3389
  }
3173
3390
  });
3391
+ var progressIds = Object.keys(hydrateProgress);
3174
3392
  var datasetsAllSettledTask = createDatasetTasks.length ? _tasks["default"].allSettled(createDatasetTasks).map(function (results) {
3175
3393
  return (0, _actions.createNewDatasetSuccess)({
3176
3394
  results: results,
3177
- addToMapOptions: options
3395
+ addToMapOptions: options,
3396
+ progressIds: progressIds
3178
3397
  });
3179
3398
  }) : null;
3180
3399
  if (datasetsAllSettledTask) {
@@ -3182,13 +3401,19 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
3182
3401
  change: 1,
3183
3402
  type: ''
3184
3403
  }));
3404
+ if (progressIds.length) {
3405
+ updatedState = _objectSpread(_objectSpread({}, updatedState), {}, {
3406
+ loadingProgress: _objectSpread(_objectSpread({}, updatedState.loadingProgress), hydrateProgress)
3407
+ });
3408
+ }
3185
3409
  }
3186
3410
  return (0, _tasks.withTask)(updatedState, [].concat((0, _toConsumableArray2["default"])(datasetsAllSettledTask ? [datasetsAllSettledTask] : []), notificationTasks));
3187
3411
  };
3188
3412
  var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
3189
3413
  var _action$payload = action.payload,
3190
3414
  results = _action$payload.results,
3191
- addToMapOptions = _action$payload.addToMapOptions;
3415
+ addToMapOptions = _action$payload.addToMapOptions,
3416
+ progressIds = _action$payload.progressIds;
3192
3417
  var notificationTasks = [];
3193
3418
  var newDataEntries = results.reduce(function (accu, result, idx) {
3194
3419
  if (result.status === 'fulfilled') {
@@ -3227,9 +3452,9 @@ var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = fu
3227
3452
  mergers: datasetMergers,
3228
3453
  postMergerPayload: postMergerPayload
3229
3454
  });
3230
- return (0, _tasks.withTask)(setLoadingIndicatorUpdater(updatedState, (0, _composerHelpers.payload_)({
3455
+ return (0, _tasks.withTask)(clearLoadingProgress(setLoadingIndicatorUpdater(updatedState, (0, _composerHelpers.payload_)({
3231
3456
  change: -1
3232
- })), notificationTasks);
3457
+ })), progressIds), notificationTasks);
3233
3458
  };
3234
3459
 
3235
3460
  /**
@@ -3460,10 +3685,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3460
3685
  // follow renamed columns
3461
3686
  var columnsPatch = {};
3462
3687
  var columnsChanged = false;
3463
- Object.entries(layer.config.columns || {}).forEach(function (_ref32) {
3464
- var _ref33 = (0, _slicedToArray2["default"])(_ref32, 2),
3465
- ckey = _ref33[0],
3466
- col = _ref33[1];
3688
+ Object.entries(layer.config.columns || {}).forEach(function (_ref36) {
3689
+ var _ref37 = (0, _slicedToArray2["default"])(_ref36, 2),
3690
+ ckey = _ref37[0],
3691
+ col = _ref37[1];
3467
3692
  if (col !== null && col !== void 0 && col.value && renames[col.value]) {
3468
3693
  columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
3469
3694
  value: renames[col.value]
@@ -3476,8 +3701,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3476
3701
  }
3477
3702
 
3478
3703
  // follow renamed visual-channel fields (colorField, sizeField, ...)
3479
- Object.values(layer.visualChannels).forEach(function (_ref34) {
3480
- var field = _ref34.field;
3704
+ Object.values(layer.visualChannels).forEach(function (_ref38) {
3705
+ var field = _ref38.field;
3481
3706
  var fieldConfig = layer.config[field];
3482
3707
  if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
3483
3708
  configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
@@ -3867,14 +4092,14 @@ function parseProgress() {
3867
4092
  * @memberof visStateUpdaters
3868
4093
  * @public
3869
4094
  */
3870
- var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
4095
+ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref39) {
3871
4096
  var _accumulated$data;
3872
- var _ref35$payload = _ref35.payload,
3873
- gen = _ref35$payload.gen,
3874
- fileName = _ref35$payload.fileName,
3875
- progress = _ref35$payload.progress,
3876
- accumulated = _ref35$payload.accumulated,
3877
- onFinish = _ref35$payload.onFinish;
4097
+ var _ref39$payload = _ref39.payload,
4098
+ gen = _ref39$payload.gen,
4099
+ fileName = _ref39$payload.fileName,
4100
+ progress = _ref39$payload.progress,
4101
+ accumulated = _ref39$payload.accumulated,
4102
+ onFinish = _ref39$payload.onFinish;
3878
4103
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3879
4104
  fileName: fileName,
3880
4105
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -3891,9 +4116,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3891
4116
  return (0, _actions.loadFilesSuccess)(result);
3892
4117
  }, function (err) {
3893
4118
  return (0, _actions.loadFilesErr)(fileName, err);
3894
- })] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref36) {
3895
- var value = _ref36.value,
3896
- done = _ref36.done;
4119
+ })] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref40) {
4120
+ var value = _ref40.value,
4121
+ done = _ref40.done;
3897
4122
  return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
3898
4123
  gen: gen,
3899
4124
  fileName: fileName,
@@ -3911,9 +4136,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3911
4136
  * @memberof visStateUpdaters
3912
4137
  * @public
3913
4138
  */
3914
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
3915
- var error = _ref37.error,
3916
- fileName = _ref37.fileName;
4139
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref41) {
4140
+ var error = _ref41.error,
4141
+ fileName = _ref41.fileName;
3917
4142
  // update ui with error message
3918
4143
  _window.console.warn(error);
3919
4144
  if (!state.fileLoading) {
@@ -3941,8 +4166,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
3941
4166
  * @memberof visStateUpdaters
3942
4167
  * @public
3943
4168
  */
3944
- var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref38) {
3945
- var dataId = _ref38.dataId;
4169
+ var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref42) {
4170
+ var dataId = _ref42.dataId;
3946
4171
  // apply cpuFilter
3947
4172
  var dataIds = (0, _commonUtils.toArray)(dataId);
3948
4173
  return dataIds.reduce(function (accu, id) {
@@ -4001,9 +4226,9 @@ function initialFileLoadingProgress(file, index) {
4001
4226
  error: null
4002
4227
  });
4003
4228
  }
4004
- function updateFileLoadingProgressUpdater(state, _ref40) {
4005
- var fileName = _ref40.fileName,
4006
- progress = _ref40.progress;
4229
+ function updateFileLoadingProgressUpdater(state, _ref44) {
4230
+ var fileName = _ref44.fileName,
4231
+ progress = _ref44.progress;
4007
4232
  // @ts-expect-error
4008
4233
  return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
4009
4234
  }
@@ -4095,8 +4320,8 @@ function updateAnimationDomain(state) {
4095
4320
  * Update the status of the editor
4096
4321
  * @memberof visStateUpdaters
4097
4322
  */
4098
- var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
4099
- var mode = _ref41.mode;
4323
+ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref45) {
4324
+ var mode = _ref45.mode;
4100
4325
  var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
4101
4326
  if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
4102
4327
  return state;
@@ -4114,10 +4339,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
4114
4339
  * Update editor features
4115
4340
  * @memberof visStateUpdaters
4116
4341
  */
4117
- function setFeaturesUpdater(state, _ref42) {
4342
+ function setFeaturesUpdater(state, _ref46) {
4118
4343
  var _lastFeature$properti, _lastFeature$properti2;
4119
- var _ref42$features = _ref42.features,
4120
- features = _ref42$features === void 0 ? [] : _ref42$features;
4344
+ var _ref46$features = _ref46.features,
4345
+ features = _ref46$features === void 0 ? [] : _ref46$features;
4121
4346
  var lastFeature = features.length && features[features.length - 1];
4122
4347
  var newState = _objectSpread(_objectSpread({}, state), {}, {
4123
4348
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -4190,10 +4415,10 @@ function findEditorFeature(state, feature) {
4190
4415
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
4191
4416
  * @memberof visStateUpdaters
4192
4417
  */
4193
- function setEditorFeaturePropertiesUpdater(state, _ref43) {
4418
+ function setEditorFeaturePropertiesUpdater(state, _ref47) {
4194
4419
  var _state$editor$selecte2;
4195
- var feature = _ref43.feature,
4196
- properties = _ref43.properties;
4420
+ var feature = _ref47.feature,
4421
+ properties = _ref47.properties;
4197
4422
  if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
4198
4423
  return state;
4199
4424
  }
@@ -4232,9 +4457,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref43) {
4232
4457
  * Set the current selected feature
4233
4458
  * @memberof uiStateUpdaters
4234
4459
  */
4235
- var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref44) {
4236
- var feature = _ref44.feature,
4237
- selectionContext = _ref44.selectionContext;
4460
+ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref48) {
4461
+ var feature = _ref48.feature,
4462
+ selectionContext = _ref48.selectionContext;
4238
4463
  // add bbox for polygon filter to speed up filtering
4239
4464
  var selectedFeature = feature;
4240
4465
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -4256,8 +4481,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
4256
4481
  * Delete existing feature from filters
4257
4482
  * @memberof visStateUpdaters
4258
4483
  */
4259
- function deleteFeatureUpdater(state, _ref45) {
4260
- var feature = _ref45.feature;
4484
+ function deleteFeatureUpdater(state, _ref49) {
4485
+ var feature = _ref49.feature;
4261
4486
  if (!feature) {
4262
4487
  return state;
4263
4488
  }
@@ -4402,10 +4627,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
4402
4627
  * @memberof visStateUpdaters
4403
4628
  * @public
4404
4629
  */
4405
- function sortTableColumnUpdater(state, _ref46) {
4406
- var dataId = _ref46.dataId,
4407
- column = _ref46.column,
4408
- mode = _ref46.mode;
4630
+ function sortTableColumnUpdater(state, _ref50) {
4631
+ var dataId = _ref50.dataId,
4632
+ column = _ref50.column,
4633
+ mode = _ref50.mode;
4409
4634
  var dataset = state.datasets[dataId];
4410
4635
  if (!dataset) {
4411
4636
  return state;
@@ -4426,9 +4651,9 @@ function sortTableColumnUpdater(state, _ref46) {
4426
4651
  * @memberof visStateUpdaters
4427
4652
  * @public
4428
4653
  */
4429
- function pinTableColumnUpdater(state, _ref47) {
4430
- var dataId = _ref47.dataId,
4431
- column = _ref47.column;
4654
+ function pinTableColumnUpdater(state, _ref51) {
4655
+ var dataId = _ref51.dataId,
4656
+ column = _ref51.column;
4432
4657
  var dataset = state.datasets[dataId];
4433
4658
  if (!dataset) {
4434
4659
  return state;
@@ -4442,9 +4667,9 @@ function pinTableColumnUpdater(state, _ref47) {
4442
4667
  * @memberof visStateUpdaters
4443
4668
  * @public
4444
4669
  */
4445
- function copyTableColumnUpdater(state, _ref48) {
4446
- var dataId = _ref48.dataId,
4447
- column = _ref48.column;
4670
+ function copyTableColumnUpdater(state, _ref52) {
4671
+ var dataId = _ref52.dataId,
4672
+ column = _ref52.column;
4448
4673
  var dataset = state.datasets[dataId];
4449
4674
  if (!dataset) {
4450
4675
  return state;
@@ -4468,9 +4693,9 @@ function copyTableColumnUpdater(state, _ref48) {
4468
4693
  * @memberof visStateUpdaters
4469
4694
  * @public
4470
4695
  */
4471
- function setColumnDisplayFormatUpdater(state, _ref49) {
4472
- var dataId = _ref49.dataId,
4473
- formats = _ref49.formats;
4696
+ function setColumnDisplayFormatUpdater(state, _ref53) {
4697
+ var dataId = _ref53.dataId,
4698
+ formats = _ref53.formats;
4474
4699
  var dataset = state.datasets[dataId];
4475
4700
  if (!dataset) {
4476
4701
  return state;
@@ -4521,12 +4746,12 @@ function requestDatasetColumnStatistics(_x4) {
4521
4746
  return _requestDatasetColumnStatistics.apply(this, arguments);
4522
4747
  }
4523
4748
  function _requestDatasetColumnStatistics() {
4524
- _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref50) {
4749
+ _requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref54) {
4525
4750
  var dataset, field, filterProps, mappedValue, values, result;
4526
4751
  return _regenerator["default"].wrap(function _callee4$(_context4) {
4527
4752
  while (1) switch (_context4.prev = _context4.next) {
4528
4753
  case 0:
4529
- dataset = _ref50.dataset, field = _ref50.field;
4754
+ dataset = _ref54.dataset, field = _ref54.field;
4530
4755
  _context4.next = 3;
4531
4756
  return yieldForPaint();
4532
4757
  case 3:
@@ -4559,9 +4784,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
4559
4784
  * @memberof visStateUpdaters
4560
4785
  * @public
4561
4786
  */
4562
- function loadColumnStatsUpdater(state, _ref51) {
4563
- var dataId = _ref51.dataId,
4564
- fieldName = _ref51.fieldName;
4787
+ function loadColumnStatsUpdater(state, _ref55) {
4788
+ var dataId = _ref55.dataId,
4789
+ fieldName = _ref55.fieldName;
4565
4790
  var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
4566
4791
  var dataset = state.datasets[dataId];
4567
4792
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -4582,9 +4807,9 @@ function loadColumnStatsUpdater(state, _ref51) {
4582
4807
  return LOAD_COLUMN_STATS_TASK({
4583
4808
  dataset: newDataset,
4584
4809
  field: f
4585
- }).bimap(function (_ref52) {
4586
- var result = _ref52.result,
4587
- filterProps = _ref52.filterProps;
4810
+ }).bimap(function (_ref56) {
4811
+ var result = _ref56.result,
4812
+ filterProps = _ref56.filterProps;
4588
4813
  return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
4589
4814
  }, function (error) {
4590
4815
  return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
@@ -4599,11 +4824,11 @@ function loadColumnStatsUpdater(state, _ref51) {
4599
4824
  * @memberof visStateUpdaters
4600
4825
  * @public
4601
4826
  */
4602
- function loadColumnStatsSuccessUpdater(state, _ref53) {
4603
- var result = _ref53.result,
4604
- filterProps = _ref53.filterProps,
4605
- dataId = _ref53.dataId,
4606
- fieldName = _ref53.fieldName;
4827
+ function loadColumnStatsSuccessUpdater(state, _ref57) {
4828
+ var result = _ref57.result,
4829
+ filterProps = _ref57.filterProps,
4830
+ dataId = _ref57.dataId,
4831
+ fieldName = _ref57.fieldName;
4607
4832
  var dataset = state.datasets[dataId];
4608
4833
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
4609
4834
  return f.name === fieldName;
@@ -4631,10 +4856,10 @@ function loadColumnStatsSuccessUpdater(state, _ref53) {
4631
4856
  * @memberof visStateUpdaters
4632
4857
  * @public
4633
4858
  */
4634
- function loadColumnStatsErrorUpdater(state, _ref54) {
4635
- var error = _ref54.error,
4636
- dataId = _ref54.dataId,
4637
- fieldName = _ref54.fieldName;
4859
+ function loadColumnStatsErrorUpdater(state, _ref58) {
4860
+ var error = _ref58.error,
4861
+ dataId = _ref58.dataId,
4862
+ fieldName = _ref58.fieldName;
4638
4863
  _window.console.error(error);
4639
4864
  var dataset = state.datasets[dataId];
4640
4865
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
@@ -4720,8 +4945,8 @@ _action) {
4720
4945
  * Copy in-memory rows (or loaded vector-tile features) inside the selected
4721
4946
  * Draw on Map polygon into a new dataset.
4722
4947
  */
4723
- function extractDataFromFeatureUpdater(state, _ref55) {
4724
- var layerId = _ref55.layerId;
4948
+ function extractDataFromFeatureUpdater(state, _ref59) {
4949
+ var layerId = _ref59.layerId;
4725
4950
  var feature = state.editor.selectedFeature;
4726
4951
  var layer = state.layers.find(function (l) {
4727
4952
  return l.id === layerId;
@@ -4801,9 +5026,9 @@ function extractDataFromFeatureUpdater(state, _ref55) {
4801
5026
  }
4802
5027
  });
4803
5028
  }
4804
- function setFilterAnimationTimeConfigUpdater(state, _ref56) {
4805
- var idx = _ref56.idx,
4806
- config = _ref56.config;
5029
+ function setFilterAnimationTimeConfigUpdater(state, _ref60) {
5030
+ var idx = _ref60.idx,
5031
+ config = _ref60.config;
4807
5032
  var oldFilter = state.filters[idx];
4808
5033
  if (!oldFilter) {
4809
5034
  _window.console.error("filters.".concat(idx, " is undefined"));
@@ -4833,8 +5058,8 @@ function checkTimeConfigArgs(config) {
4833
5058
  /**
4834
5059
  * Update editor
4835
5060
  */
4836
- function setLayerAnimationTimeConfigUpdater(state, _ref57) {
4837
- var config = _ref57.config;
5061
+ function setLayerAnimationTimeConfigUpdater(state, _ref61) {
5062
+ var config = _ref61.config;
4838
5063
  if (!config) {
4839
5064
  return state;
4840
5065
  }
@@ -5032,16 +5257,40 @@ function setTimeFilterTimelineModeUpdater(state, action) {
5032
5257
  * @returns nextState
5033
5258
  * @public
5034
5259
  */
5035
- var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref58) {
5036
- var change = _ref58.payload.change;
5260
+ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref62) {
5261
+ var change = _ref62.payload.change;
5037
5262
  var loadingIndicatorValue = state.loadingIndicatorValue;
5038
5263
  if (!loadingIndicatorValue) {
5039
5264
  loadingIndicatorValue = 0;
5040
5265
  }
5266
+ var nextValue = Math.max(loadingIndicatorValue + change, 0);
5041
5267
  return _objectSpread(_objectSpread({}, state), {}, {
5042
- loadingIndicatorValue: Math.max(loadingIndicatorValue + change, 0)
5043
- });
5268
+ loadingIndicatorValue: nextValue
5269
+ }, nextValue === 0 && Object.keys(state.loadingProgress || {}).length ? {
5270
+ loadingProgress: {}
5271
+ } : {});
5044
5272
  };
5273
+
5274
+ /**
5275
+ * Record download progress for an in-flight remote dataset hydrate.
5276
+ * @memberof visStateUpdaters
5277
+ * @public
5278
+ */
5279
+ function setLoadingProgressUpdater(state, _ref63) {
5280
+ var _state$loadingProgres;
5281
+ var id = _ref63.id,
5282
+ percent = _ref63.percent;
5283
+ if ((state.loadingIndicatorValue || 0) <= 0) {
5284
+ return state;
5285
+ }
5286
+ var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
5287
+ if (((_state$loadingProgres = state.loadingProgress) === null || _state$loadingProgres === void 0 ? void 0 : _state$loadingProgres[id]) === nextPercent) {
5288
+ return state;
5289
+ }
5290
+ return _objectSpread(_objectSpread({}, state), {}, {
5291
+ loadingProgress: _objectSpread(_objectSpread({}, state.loadingProgress), {}, (0, _defineProperty2["default"])({}, id, nextPercent))
5292
+ });
5293
+ }
5045
5294
  function adjustAnimationConfigWithFilter(state, filterIdx) {
5046
5295
  var filter = state.filters[filterIdx];
5047
5296
  if (filter.syncedWithLayerTimeline) {
@@ -5102,6 +5351,9 @@ function adjustTimeFilterInterval(state, filter) {
5102
5351
  // replace it with another dataId
5103
5352
  function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
5104
5353
  var _value$config, _value$config2;
5354
+ if (value == null) {
5355
+ return null;
5356
+ }
5105
5357
  if (Array.isArray(value)) {
5106
5358
  // for layers, filters, call defaultReplaceParentDatasetIds on each item in array
5107
5359
  var replaced = value.map(function (v) {
@@ -5153,10 +5405,10 @@ function findChildDatasetIds(value) {
5153
5405
  }
5154
5406
 
5155
5407
  // moved unmerged layers, filters, interactions
5156
- function moveValueToBeMerged(state, propValues, _ref60) {
5157
- var prop = _ref60.prop,
5158
- toMergeProp = _ref60.toMergeProp,
5159
- saveUnmerged = _ref60.saveUnmerged;
5408
+ function moveValueToBeMerged(state, propValues, _ref65) {
5409
+ var prop = _ref65.prop,
5410
+ toMergeProp = _ref65.toMergeProp,
5411
+ saveUnmerged = _ref65.saveUnmerged;
5160
5412
  // remove prop value from state
5161
5413
  // TODO: should we add remove updater to merger as well?
5162
5414
  if (!propValues) {
@@ -5215,17 +5467,50 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
5215
5467
  }
5216
5468
  return nextState;
5217
5469
  }
5218
- function replaceDatasetDepsInState(state, _ref61) {
5219
- var dataId = _ref61.dataId,
5220
- dataIdToUse = _ref61.dataIdToUse;
5470
+
5471
+ /**
5472
+ * The order to preserve for the items that will be merged back.
5473
+ *
5474
+ * `ids` comes from the serialized state, so it lists everything but the items
5475
+ * another dataset's replacement parked a moment ago: an app refreshing several
5476
+ * datasets in a row prepares the second replacement before the first one's
5477
+ * items have merged back. Writing `ids` as it is would drop those, and
5478
+ * `insertItemBasedOnPreservedOrder` puts an item it cannot place at the front —
5479
+ * so they would come back reversed. Where they belong is what the order written
5480
+ * when they were parked already says, so that order is kept for them.
5481
+ */
5482
+ function preservedOrderWithParked() {
5483
+ var previousOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5484
+ var ids = arguments.length > 1 ? arguments[1] : undefined;
5485
+ var parked = arguments.length > 2 ? arguments[2] : undefined;
5486
+ var parkedIds = parked.map(function (item) {
5487
+ return item === null || item === void 0 ? void 0 : item.id;
5488
+ }).filter(function (id) {
5489
+ return Boolean(id) && !ids.includes(id);
5490
+ });
5491
+ if (!parkedIds.length) {
5492
+ return ids;
5493
+ }
5494
+ var known = new Set([].concat((0, _toConsumableArray2["default"])(ids), (0, _toConsumableArray2["default"])(parkedIds)));
5495
+ var ordered = (previousOrder || []).filter(function (id) {
5496
+ return known.has(id);
5497
+ });
5498
+ var rest = [].concat((0, _toConsumableArray2["default"])(ids), (0, _toConsumableArray2["default"])(parkedIds)).filter(function (id) {
5499
+ return !ordered.includes(id);
5500
+ });
5501
+ return [].concat((0, _toConsumableArray2["default"])(ordered), (0, _toConsumableArray2["default"])(rest));
5502
+ }
5503
+ function replaceDatasetDepsInState(state, _ref66) {
5504
+ var dataId = _ref66.dataId,
5505
+ dataIdToUse = _ref66.dataIdToUse;
5221
5506
  var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
5222
- var nextState = state.mergers.reduce(function (accuState, _ref62) {
5223
- var prop = _ref62.prop,
5224
- toMergeProp = _ref62.toMergeProp,
5225
- replaceParentDatasetIds = _ref62.replaceParentDatasetIds,
5226
- getChildDatasetIds = _ref62.getChildDatasetIds,
5227
- saveUnmerged = _ref62.saveUnmerged,
5228
- preserveOrder = _ref62.preserveOrder;
5507
+ var nextState = state.mergers.reduce(function (accuState, _ref67) {
5508
+ var prop = _ref67.prop,
5509
+ toMergeProp = _ref67.toMergeProp,
5510
+ replaceParentDatasetIds = _ref67.replaceParentDatasetIds,
5511
+ getChildDatasetIds = _ref67.getChildDatasetIds,
5512
+ saveUnmerged = _ref67.saveUnmerged,
5513
+ preserveOrder = _ref67.preserveOrder;
5229
5514
  // get dataset ids that are depends on this dataset
5230
5515
  var props = (0, _commonUtils.toArray)(prop);
5231
5516
  var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
@@ -5234,13 +5519,20 @@ function replaceDatasetDepsInState(state, _ref61) {
5234
5519
  }) : [];
5235
5520
  var replacedState = accuState;
5236
5521
  savedProps.forEach(function (propValue, i) {
5237
- var _replacedState$merger;
5522
+ var _replacedState$merger, _replacedState$merger2;
5523
+ if (propValue == null) {
5524
+ return;
5525
+ }
5238
5526
  var mergerOptions = {
5239
5527
  prop: props[i],
5240
5528
  toMergeProp: toMergeProps[i],
5241
5529
  getChildDatasetIds: getChildDatasetIds,
5242
5530
  saveUnmerged: saveUnmerged
5243
5531
  };
5532
+
5533
+ // What another dataset's replacement parked a moment ago and has not
5534
+ // merged back yet, read before this one parks anything of its own.
5535
+ var parkedElsewhere = mergerOptions.toMergeProp !== undefined ? (0, _commonUtils.toArray)((_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 ? _replacedState$merger : []) : [];
5244
5536
  var replacedItem = (replaceParentDatasetIds === null || replaceParentDatasetIds === void 0 ? void 0 : replaceParentDatasetIds(propValue, dataId, dataIdToUse)) || defaultReplaceParentDatasetIds(propValue, dataId, dataIdToUse);
5245
5537
  replacedState = replacedItem ? replacePropValueInState(replacedState, replacedItem, mergerOptions) : replacedState;
5246
5538
 
@@ -5248,21 +5540,21 @@ function replaceDatasetDepsInState(state, _ref61) {
5248
5540
  // can still hold another dataset's items, replaced a moment earlier and
5249
5541
  // not merged back yet; overwriting the order they were parked with would
5250
5542
  // merge them back in reverse.
5251
- if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 && _replacedState$merger.length && preserveOrder) {
5252
- replacedState[preserveOrder] = propValue.map(function (item) {
5543
+ if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger2 = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger2 !== void 0 && _replacedState$merger2.length && preserveOrder) {
5544
+ replacedState[preserveOrder] = preservedOrderWithParked(replacedState[preserveOrder], propValue.map(function (item) {
5253
5545
  return item.id;
5254
- });
5546
+ }), parkedElsewhere);
5255
5547
  }
5256
5548
  });
5257
5549
  return replacedState;
5258
5550
  }, state);
5259
5551
  return nextState;
5260
5552
  }
5261
- function replacePropValueInState(state, replacedItem, _ref63) {
5262
- var prop = _ref63.prop,
5263
- toMergeProp = _ref63.toMergeProp,
5264
- getChildDatasetIds = _ref63.getChildDatasetIds,
5265
- saveUnmerged = _ref63.saveUnmerged;
5553
+ function replacePropValueInState(state, replacedItem, _ref68) {
5554
+ var prop = _ref68.prop,
5555
+ toMergeProp = _ref68.toMergeProp,
5556
+ getChildDatasetIds = _ref68.getChildDatasetIds,
5557
+ saveUnmerged = _ref68.saveUnmerged;
5266
5558
  // prop is depends on the dataset to be replaced
5267
5559
  // remove prop from state, and move it to toBeMerged
5268
5560
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -5280,4 +5572,4 @@ function replacePropValueInState(state, replacedItem, _ref63) {
5280
5572
  }
5281
5573
  return nextState;
5282
5574
  }
5283
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJUYXNrIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxMyIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE2IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE3IiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjE5IiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjAiLCJfcmVmMjAkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjAkcGF5bG9hZCRjb25maWciLCJfcmVmMjAkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyMSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjIyIiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjMiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjQiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyNSIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwid2l0aFRhc2siLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiY3VycmVudCIsImV2ZXJ5IiwicmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlIiwibmV4dExheWVycyIsImRyb3BwZWRMYXllcnMiLCJyZWJvdW5kIiwibmV4dExheWVyT3JkZXIiLCJuZXh0U3BsaXRNYXBzIiwibmV4dExheWVyRGF0YSIsIm9sZElkeCIsImZpbHRlcnNGb3JEYXRhc2V0Iiwib3RoZXJGaWx0ZXJzIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMjciLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJpc1BsYWluT2JqZWN0IiwidG9BcnJheVJvdyIsInJvdyIsInJlY29yZCIsIm5vcm1hbGl6ZURhdGFzZXRSb3dzIiwibGlzdCIsIm5vcm1hbGl6ZWQiLCJhcnJheVJvdyIsImFkZFRvRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjgiLCJhcHBsaWVkIiwidXBzZXJ0QnkiLCJ1cHNlcnRSb3dzIiwiYXBwZW5kUm93cyIsInJlbW92ZUZyb21EYXRhc2V0VXBkYXRlciIsIl9yZWYyOSIsInJvd0luZGV4ZXMiLCJieUZpZWxkIiwiaW5kZXhlcyIsImZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyIsInJlbW92ZVJvd3MiLCJyZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlciIsIl9yZWYzMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMzEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMzEkaW5mbyIsInJlc3QiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiZGVlcG1lcmdlIiwiZXhpc3RpbmciLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzMiIsIl9yZWYzMyIsImNrZXkiLCJjb2wiLCJfcmVmMzQiLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiU2V0IiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiZmxhdE1hcCIsIl9yZW5hbWVzJGYkbmFtZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM1IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzUkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjM2IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYzNyIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMzgiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQwIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQxIiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQyIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0MiRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQzIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0NCIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0NSIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NiIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0NyIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjQ5IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjUwIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjUxIiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwidGFza3MiLCJfcmVmNTIiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY1MyIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNTQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsInByb2Nlc3NHZW9qc29uIiwiZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTUiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0ZWQiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU2IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY1NyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjU4IiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjAiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJfcmVmNjEiLCJhY2N1U3RhdGUiLCJfcmVmNjIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY2MyIsImNoaWxkRGF0YUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04sXG4gIEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5ULFxuICB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtnZXRGaWxlc1RvUGFyc2UsIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCwgcHJvY2Vzc0dlb2pzb259IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgRmVhdHVyZSxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXRcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIEtlcGxlclRhYmxlLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIGRpc2FibGUgc3RhY2sgY2FwdHVyZSBmb3Igd2l0aFRhc2sgY2FsbHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBzdHJpY3QgcmVkdWNlciBjb250ZXh0XG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIGRhdGFzZXQgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS5cbiAqIGBhZGREYXRhVG9NYXBgIGFuZCBgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlYCBvZnRlbiBwYXNzIGB7bmFtZSwgdHlwZX1gXG4gKiBvciBwcm9jZXNzb3IgZmllbGRzIHdob3NlIHZhbHVlQWNjZXNzb3IgaXMgbm90IGJvdW5kIHRvIHRoZSBLZXBsZXJUYWJsZSwgd2hpY2hcbiAqIGxlYXZlcyBzdHJva2VDb2xvckRvbWFpbiBhdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICBuZXdDb25maWc6IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uWyduZXdDb25maWcnXSxcbiAgZGF0YXNldDogS2VwbGVyVGFibGUgfCB1bmRlZmluZWQsXG4gIHZpc3VhbENoYW5uZWw6IExheWVyWyd2aXN1YWxDaGFubmVscyddW3N0cmluZ10gfCB1bmRlZmluZWRcbikge1xuICBpZiAoIWRhdGFzZXQgfHwgIXZpc3VhbENoYW5uZWwpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGluY29taW5nID0gbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICBpZiAoIWluY29taW5nIHx8IHR5cGVvZiBpbmNvbWluZyAhPT0gJ29iamVjdCcgfHwgIWluY29taW5nLm5hbWUpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGZvdW5kID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBpbmNvbWluZy5uYW1lKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdDb25maWcsXG4gICAgW3Zpc3VhbENoYW5uZWwuZmllbGRdOiBmb3VuZFxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCBuZXdDb25maWcgPSByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gICAgYWN0aW9uLm5ld0NvbmZpZyxcbiAgICBkYXRhc2V0LFxuICAgIG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdXG4gICk7XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgLy8gSmVua3MgYnJlYWtzIGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGNvbG9ycy4gUmVjYWxjdWxhdGUgdGhlIGRvbWFpbiB3aGVuXG4gIC8vIHRoZSBjb2xvciByYW5nZSBvZiBhIEplbmtzIGNoYW5uZWwgY2hhbmdlcy5cbiAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgIE9iamVjdC5rZXlzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxLZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gbmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFubmVsPy5zY2FsZSAmJlxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZ1tjaGFubmVsLnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuamVua3MgJiZcbiAgICAgICAgICBjaGFubmVsLnJhbmdlICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbi5uZXdWaXNDb25maWcsIGNoYW5uZWwucmFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5lbmROYW1lOiB7XG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIGZpbHRlciA9IGZpbHRlci5ncHVcbiAgICAgICAgICA/IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKVxuICAgICAgICAgIDogey4uLmZpbHRlciwgZ3B1Q2hhbm5lbDogdW5kZWZpbmVkLCBncHVFbmRDaGFubmVsOiB1bmRlZmluZWR9O1xuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/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+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuZnVuY3Rpb24gaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGE/OiBQcm90b0RhdGFzZXRbJ2RhdGEnXSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZGF0YT8ucm93cz8ubGVuZ3RoIHx8IGRhdGE/LmNvbHM/Lmxlbmd0aCB8fCAoZGF0YSBhcyB7YXJyb3dUYWJsZT86IHVua25vd259KT8uYXJyb3dUYWJsZVxuICApO1xufVxuXG5mdW5jdGlvbiBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFzZXQuaW5mbz8udHlwZSA9PT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgJiZcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJlxuICAgICFoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YXNldC5kYXRhKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldChkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDBcbiAgfSk7XG4gIGlmICghbG9hZGVkLmRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRhdGEgbG9hZGVkIGZyb20gJHtkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2V9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIGRhdGE6IGxvYWRlZC5kYXRhLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgZXRhZzogbG9hZGVkLmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGxvYWRlZC5sYXN0TW9kaWZpZWQsXG4gICAgICAuLi4odHlwZW9mIGxvYWRlZC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiBsb2FkZWQuc2l6ZX0gOiB7fSksXG4gICAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnXG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0LFxuICAnSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG5jb25zdCBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKGFzeW5jIChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufSwgJ0ZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSycpO1xuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIHJldHVybiBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyhkYXRhc2V0KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHtpbmZvLCAuLi5yZXN0fSwgc3RhdGUuZGF0YXNldHMpO1xuICAgIGlmICh0YXNrKSB7XG4gICAgICBjcmVhdGVEYXRhc2V0VGFza3MucHVzaCh0YXNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzYCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWZhaWxlZC0ke2RhdGFzZXRJbmRleH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPSBjcmVhdGVEYXRhc2V0VGFza3MubGVuZ3RoXG4gICAgPyBUYXNrLmFsbFNldHRsZWQoY3JlYXRlRGF0YXNldFRhc2tzKS5tYXAocmVzdWx0cyA9PlxuICAgICAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zfSlcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2spIHtcbiAgICB1cGRhdGVkU3RhdGUgPSBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IDEsIHR5cGU6ICcnfSkpO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLihkYXRhc2V0c0FsbFNldHRsZWRUYXNrID8gW2RhdGFzZXRzQWxsU2V0dGxlZFRhc2tdIDogW10pLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIC8vIGEgbGF5ZXIgYWxyZWFkeSBpbiBhIHBhbmVsIHdhcyBtZXJnZWQgZnJvbSBzcGxpdCBtYXBzLCB3aGljaCBkZWNpZGUgdGhlIHBhbmVscyBzaG93aW5nIGl0XG4gICAgY29uc3QgbGF5ZXJzTm90SW5TcGxpdE1hcHMgPSBuZXdMYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiAhbWVyZ2VkU3RhdGUuc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbGF5ZXJzTm90SW5TcGxpdE1hcHMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nID8gbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmNvbXBhbmlvbkZpbGVzIDogdW5kZWZpbmVkXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXVxuKSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9ucywgY29tcGFuaW9uRmlsZXN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+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+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgc3RhdGUgPSBmaWx0ZXJEYXRhc2V0Q1BVKHN0YXRlLCBkYXRhSWQpO1xuICAgIGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICAgIGlmICghZGF0YXNldCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBleHRyYWN0ZWQ7XG4gIHRyeSB7XG4gICAgZXh0cmFjdGVkID0gZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlKHtsYXllciwgZGF0YXNldCwgZmVhdHVyZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZC5yb3dDb3VudCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKVxuICAgICAgICAgICAgICA/ICdObyBsb2FkZWQgdmVjdG9yIHRpbGUgZmVhdHVyZXMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6ICdObyByb3dzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZycsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUtZW1wdHknXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWixPQUFBO0FBV0EsSUFBQWEsUUFBQSxHQUFBYixPQUFBO0FBZ0NBLElBQUFjLE1BQUEsR0FBQWQsT0FBQTtBQXFDQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsVUFBQSxHQUFBaEIsT0FBQTtBQW1DQSxJQUFBaUIsT0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixnQkFBQSxHQUFBbEIsT0FBQTtBQVVBLElBQUFtQixjQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLGVBQUEsR0FBQXBCLE9BQUE7QUFVQSxJQUFBcUIsUUFBQSxHQUFBbkIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNB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
5575
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGluZ1Byb2dyZXNzIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIyIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjMiLCJfcmVmMjMkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjMkcGF5bG9hZCRjb25maWciLCJfcmVmMjMkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyNCIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjI1IiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfcmVmMjYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJvblByb2dyZXNzIiwibG9hZGVkIiwiX2RhdGFzZXQkbWV0YWRhdGE5Iiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImFyZyIsImFicnVwdCIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsImZvcm1hdCIsImdldFJlbW90ZVNvdXJjZUZvcm1hdCIsImJ5cGFzc0NhY2hlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwic2VudCIsIkVycm9yIiwiZXRhZyIsImxhc3RNb2RpZmllZCIsImxhc3RGZXRjaGVkQXQiLCJEYXRlIiwibm93IiwicmVmcmVzaFN0YXR1cyIsInN0b3AiLCJIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlV2l0aFByb2dyZXNzIiwiRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJfcmVmMjciLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJnZXREYXRhc2V0UHJvZ3Jlc3NJZCIsIl9kYXRhc2V0JGluZm8yIiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiY3JlYXRlTmV3RGF0YUVudHJ5VGFzayIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInByb2dyZXNzSWQiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50Iiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiTWF0aCIsInJvdW5kIiwicGVyY2VudCIsImNoYWluIiwiaHlkcmF0ZWQiLCJ0YXNrIiwiY2xlYXJMb2FkaW5nUHJvZ3Jlc3MiLCJpZHMiLCJjdXJyZW50IiwicGF0Y2hEYXRhc2V0TWV0YWRhdGEiLCJwYXRjaCIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsInJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfeDMiLCJfcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl9jYWxsZWUzIiwiX3JlZjI4IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJyZWZyZXNoRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjkiLCJfZGF0YXNldCRtZXRhZGF0YTMiLCJfZGF0YXNldCRtZXRhZGF0YTQiLCJuZXh0RGF0YXNldCIsInJlZnJlc2hFcnJvciIsInJlZnJlc2hQcm9ncmVzcyIsIndpdGhUYXNrIiwiX3Byb2dyZXNzJHBlcmNlbnQyIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzIiwicmVmcmVzaERhdGFzZXRFcnJvciIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjMwIiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwiX2RhdGFzZXQkbWV0YWRhdGE2IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJldmVyeSIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidXBkYXRlZERhdGFzZXRzIiwibmV4dEZpbHRlcnMiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX3JlZjMxIiwiX3Jlc3VsdCRkYXRhIiwibWV0YWRhdGFQYXRjaCIsInNjaGVtYVVuY2hhbmdlZCIsIm5vdE1vZGlmaWVkIiwidXBkYXRlIiwicmVmcmVzaGVkIiwicmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEiLCJpc0RhdGFzZXRSb3dMaXN0IiwiaXNQbGFpbk9iamVjdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMyIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzMiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzQiLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM1IiwiZGF0YXNldEluZGV4IiwiX3JlZjM1JGluZm8iLCJyZXN0IiwicHJvdG8iLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsInByb2dyZXNzSWRzIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJBQ1RJT05fVEFTSyIsInJlYXNvbiIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJsYXllclZpc0NvbmZpZyIsInBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEiLCJfbGF5ZXIkY29uZmlnIiwiTEFZRVJfVFlQRVMiLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsImxheWVyc05vdEluU3BsaXRNYXBzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJmaXRNYXBCb3VuZHMiLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNiIsIl9yZWYzNyIsImNrZXkiLCJjb2wiLCJfcmVmMzgiLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImNvbXBhbmlvbkZpbGVzIiwiZmlsZXNUb0xvYWQiLCJnZXRGaWxlc1RvUGFyc2UiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiREVMQVlfVEFTSyIsImxvYWROZXh0RmlsZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJMT0FEX0ZJTEVfVEFTSyIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMzkiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYzOSRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiVU5XUkFQX1RBU0siLCJfcmVmNDAiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQxIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWY0MiIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmNDQiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmNDUiLCJza2V0Y2hlc0VuYWJsZWQiLCJlbmFibGVEcmF3T25NYXBTa2V0Y2hlcyIsIkRSQVdfUE9JTlQiLCJEUkFXX0xJTkVTVFJJTkciLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmNDYiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkyIiwiX3JlZjQ2JGZlYXR1cmVzIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJzaGFwZSIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNDciLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsIm5leHRFZGl0b3IiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ4Iiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ5Iiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUwIiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUxIiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MiIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwicGFyc2VGaWVsZFZhbHVlIiwidmFsdWVBdCIsImpvaW4iLCJjb3B5Iiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmNTMiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsImdldE1hcHBlZFZhbHVlIiwiZmlsdGVyUHJvcHMiLCJtYXBwZWRWYWx1ZSIsInlpZWxkRm9yUGFpbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfeDQiLCJfcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX2NhbGxlZTQiLCJfcmVmNTQiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTUiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1NiIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjU3IiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1OCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwicHJvY2Vzc0dlb2pzb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY1OSIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsImV4dHJhY3RlZCIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsInJvd0NvdW50Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjAiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjYxIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiU1lOQ19USU1FTElORV9NT0RFUyIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNjIiLCJzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjYzIiwiX3N0YXRlJGxvYWRpbmdQcm9ncmVzIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjUiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjY2IiwiYWNjdVN0YXRlIiwiX3JlZjY3IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjY4IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzLFxuICBzZXRMb2FkaW5nUHJvZ3Jlc3Ncbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgaXNTYXZlZExheWVyQ29uZmlnVjEsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2dldEZpbGVzVG9QYXJzZSwgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldCxcbiAgQ2hhcnRDb25maWcsXG4gIExheWVyQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIEtlcGxlclRhYmxlLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIGRpc2FibGUgc3RhY2sgY2FwdHVyZSBmb3Igd2l0aFRhc2sgY2FsbHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBzdHJpY3QgcmVkdWNlciBjb250ZXh0XG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG4gIGxvYWRpbmdQcm9ncmVzczoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICAvLyBTYXZlZCBjb25maWdzIGhhdmUgYSB2aXN1YWxDaGFubmVscyBzaWJsaW5nOyBwYXJzZWQvZWRpdG9yIEpTT04gZm9sZHMgdGhvc2VcbiAgLy8gZmllbGRzIGludG8gY29uZmlnLiBSZS1wYXJzaW5nIHRoZSBsYXR0ZXIgZHJvcHMgY29sb3JGaWVsZCBhbmQgcmVzZXRzIHRoZSBzY2FsZS5cbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZylcbiAgICA6IG5ld0xheWVyQ29uZmlnO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIGRhdGFzZXQgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS5cbiAqIGBhZGREYXRhVG9NYXBgIGFuZCBgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlYCBvZnRlbiBwYXNzIGB7bmFtZSwgdHlwZX1gXG4gKiBvciBwcm9jZXNzb3IgZmllbGRzIHdob3NlIHZhbHVlQWNjZXNzb3IgaXMgbm90IGJvdW5kIHRvIHRoZSBLZXBsZXJUYWJsZSwgd2hpY2hcbiAqIGxlYXZlcyBzdHJva2VDb2xvckRvbWFpbiBhdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICBuZXdDb25maWc6IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uWyduZXdDb25maWcnXSxcbiAgZGF0YXNldDogS2VwbGVyVGFibGUgfCB1bmRlZmluZWQsXG4gIHZpc3VhbENoYW5uZWw6IExheWVyWyd2aXN1YWxDaGFubmVscyddW3N0cmluZ10gfCB1bmRlZmluZWRcbikge1xuICBpZiAoIWRhdGFzZXQgfHwgIXZpc3VhbENoYW5uZWwpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGluY29taW5nID0gbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICBpZiAoIWluY29taW5nIHx8IHR5cGVvZiBpbmNvbWluZyAhPT0gJ29iamVjdCcgfHwgIWluY29taW5nLm5hbWUpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGZvdW5kID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBpbmNvbWluZy5uYW1lKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdDb25maWcsXG4gICAgW3Zpc3VhbENoYW5uZWwuZmllbGRdOiBmb3VuZFxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCBuZXdDb25maWcgPSByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gICAgYWN0aW9uLm5ld0NvbmZpZyxcbiAgICBkYXRhc2V0LFxuICAgIG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdXG4gICk7XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgLy8gSmVua3MgYnJlYWtzIGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGNvbG9ycy4gUmVjYWxjdWxhdGUgdGhlIGRvbWFpbiB3aGVuXG4gIC8vIHRoZSBjb2xvciByYW5nZSBvZiBhIEplbmtzIGNoYW5uZWwgY2hhbmdlcy5cbiAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgIE9iamVjdC5rZXlzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxLZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gbmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFubmVsPy5zY2FsZSAmJlxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZ1tjaGFubmVsLnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuamVua3MgJiZcbiAgICAgICAgICBjaGFubmVsLnJhbmdlICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbi5uZXdWaXNDb25maWcsIGNoYW5uZWwucmFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5lbmROYW1lOiB7XG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIGZpbHRlciA9IGZpbHRlci5ncHVcbiAgICAgICAgICA/IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKVxuICAgICAgICAgIDogey4uLmZpbHRlciwgZ3B1Q2hhbm5lbDogdW5kZWZpbmVkLCBncHVFbmRDaGFubmVsOiB1bmRlZmluZWR9O1xuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihcbiAgICByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBjaGFydCA9PiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpICYmIGNoYXJ0LmxheWVySWQgPT09IGxheWVyVG9SZW1vdmUuaWRcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcpOiBjaGFydCBpcyBMYXllckNoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIGNoYXJ0LnR5cGUgPT09ICdsYXllckNoYXJ0Jztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcsIHByb3BzOiBQYXJ0aWFsPENoYXJ0Q29uZmlnPik6IENoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jaGFydCxcbiAgICAuLi5wcm9wcyxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgLi4uKHByb3BzLmRpc3BsYXkgfHwge30pXG4gICAgfSxcbiAgICBjaGFydERpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmNoYXJ0RGlzcGxheSxcbiAgICAgIC4uLigocHJvcHMgYXMgQ2hhcnRDb25maWcpLmNoYXJ0RGlzcGxheSB8fCB7fSlcbiAgICB9XG4gIH0gYXMgQ2hhcnRDb25maWc7XG59XG5cbmZ1bmN0aW9uIGF4aXNGaWVsZElmUHJlc2VudDxUIGV4dGVuZHMge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGx9PihcbiAgYXhpczogVCB8IHVuZGVmaW5lZCxcbiAgZmllbGROYW1lczogU2V0PHN0cmluZz5cbik6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoIWF4aXM/LmZpZWxkPy5uYW1lIHx8IGZpZWxkTmFtZXMuaGFzKGF4aXMuZmllbGQubmFtZSkpIHtcbiAgICByZXR1cm4gYXhpcztcbiAgfVxuICByZXR1cm4gey4uLmF4aXMsIGZpZWxkOiBudWxsLCB0aXRsZTogbnVsbH07XG59XG5cbmZ1bmN0aW9uIGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMoXG4gIGNoYXJ0OiBDaGFydENvbmZpZyxcbiAgZGF0YXNldDoge2ZpZWxkcz86IHtuYW1lOiBzdHJpbmd9W119IHwgdW5kZWZpbmVkXG4pOiBDaGFydENvbmZpZyB7XG4gIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KChkYXRhc2V0Py5maWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKSk7XG4gIGNvbnN0IG5leHQgPSBjaGFydCBhcyBDaGFydENvbmZpZyAmIHtcbiAgICB4QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgeUF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGdyb3VwQnk/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHZhbHVlPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgfTtcbiAgcmV0dXJuIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQsIHtcbiAgICB4QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueEF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIHlBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC55QXhpcywgZmllbGROYW1lcyksXG4gICAgYXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuYXhpcywgZmllbGROYW1lcyksXG4gICAgZ3JvdXBCeTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuZ3JvdXBCeSwgZmllbGROYW1lcyksXG4gICAgdmFsdWU6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnZhbHVlLCBmaWVsZE5hbWVzKVxuICB9IGFzIFBhcnRpYWw8Q2hhcnRDb25maWc+KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVyczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgc2hvdWxkUmVtb3ZlOiAoY2hhcnQ6IENoYXJ0Q29uZmlnKSA9PiBib29sZWFuXG4pOiBUIHtcbiAgY29uc3QgY2hhcnRzID0gc3RhdGUuY2hhcnRzIHx8IFtdO1xuICBjb25zdCByZW1vdmVkID0gY2hhcnRzLmZpbHRlcihzaG91bGRSZW1vdmUpO1xuICBpZiAoIXJlbW92ZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlbW92ZWRJZHMgPSBuZXcgU2V0KHJlbW92ZWQubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IGZpbHRlcklkcyA9IG5ldyBTZXQoXG4gICAgcmVtb3ZlZC5mbGF0TWFwKGNoYXJ0ID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2hhcnQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICAgICAgcmV0dXJuIGlkID8gW2lkLCBgJHtpZH0teGAsIGAke2lkfS15YF0gOiBbXTtcbiAgICB9KVxuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IGNoYXJ0cy5maWx0ZXIoY2hhcnQgPT4gIXJlbW92ZWRJZHMuaGFzKGNoYXJ0LmlkKSlcbiAgfTtcbiAgaWYgKGZpbHRlcklkcy5zaXplKSB7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBUO1xufVxuXG4vKipcbiAqIEFkZCBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjaGFydH06IFZpc1N0YXRlQWN0aW9ucy5BZGRDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjaGFydD8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKChzdGF0ZS5jaGFydHMgfHwgW10pLnNvbWUoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGNoYXJ0LmlkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGV4aXN0aW5nID0+ICh7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAge1xuICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGNoYXJ0LmRpc3BsYXk/LmlzQ29uZmlnQWN0aXZlID8/IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IChzdGF0ZS5jaGFydHMgfHwgW10pLmZpbmRJbmRleChjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuY2hhcnRzW2lkeF07XG4gIGNvbnN0IGRhdGFJZENoYW5nZWQgPSB0eXBlb2YgcHJvcHMuZGF0YUlkID09PSAnc3RyaW5nJyAmJiBwcm9wcy5kYXRhSWQgIT09IHByZXYuZGF0YUlkO1xuICBjb25zdCBsYXllcklkQ2hhbmdlZCA9XG4gICAgaXNMYXllckNoYXJ0Q29uZmlnKHByZXYpICYmXG4gICAgdHlwZW9mIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkICE9PSBwcmV2LmxheWVySWQ7XG4gIGxldCBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhwcmV2LCBwcm9wcyk7XG4gIGlmIChkYXRhSWRDaGFuZ2VkIHx8IGxheWVySWRDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGF0YUlkID0gbmV4dC5kYXRhSWQgfHwgdW5kZWZpbmVkO1xuICAgIG5leHQgPSBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKG5leHQsIGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiB1bmRlZmluZWQpO1xuICAgIGlmIChuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkKSB7XG4gICAgICBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhuZXh0LCB7XG4gICAgICAgIGNyb3NzRmlsdGVyOiB7Li4ubmV4dC5jcm9zc0ZpbHRlciwgZW5hYmxlZDogZmFsc2UsIHZhbHVlOiB7fSwgZmllbGROYW1lczoge319XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhcnRzID0gWy4uLnN0YXRlLmNoYXJ0c107XG4gIGNoYXJ0c1tpZHhdID0gbmV4dDtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzXG4gIH07XG4gIGNvbnN0IGZpbHRlcklkID0gbmV4dC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQgfHwgcHJldi5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gIGlmIChwcmV2LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmICFuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmIGZpbHRlcklkKSB7XG4gICAgY29uc3Qgb3duZWRGaWx0ZXJJZHMgPSBuZXcgU2V0KFtmaWx0ZXJJZCwgYCR7ZmlsdGVySWR9LXhgLCBgJHtmaWx0ZXJJZH0teWBdKTtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBvd25lZEZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGNoYXJ0IGFuZCBhbnkgY3Jvc3MtZmlsdGVyIGl0IG93bnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhzdGF0ZSwgY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/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+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhwcm9ncmVzc0lkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gIH0pLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckxvYWRpbmdQcm9ncmVzcyhzdGF0ZTogVmlzU3RhdGUsIGlkcz86IHN0cmluZ1tdKTogVmlzU3RhdGUge1xuICBjb25zdCBjdXJyZW50ID0gc3RhdGUubG9hZGluZ1Byb2dyZXNzIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiB7fX07XG4gIH1cbiAgaWYgKCFpZHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0ID0gey4uLmN1cnJlbnR9O1xuICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgZGVsZXRlIG5leHRbaWRdO1xuICB9KTtcbiAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiBuZXh0fTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IGh5ZHJhdGVQcm9ncmVzczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm90byA9IHtpbmZvLCAuLi5yZXN0fTtcbiAgICBpZiAobmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShwcm90bykpIHtcbiAgICAgIGh5ZHJhdGVQcm9ncmVzc1tnZXREYXRhc2V0UHJvZ3Jlc3NJZChwcm90bywgZGF0YXNldEluZGV4KV0gPSAwO1xuICAgIH1cbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhwcm90bywgc3RhdGUuZGF0YXNldHMpO1xuICAgIGlmICh0YXNrKSB7XG4gICAgICBjcmVhdGVEYXRhc2V0VGFza3MucHVzaCh0YXNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzYCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWZhaWxlZC0ke2RhdGFzZXRJbmRleH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHByb2dyZXNzSWRzID0gT2JqZWN0LmtleXMoaHlkcmF0ZVByb2dyZXNzKTtcbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnMsIHByb2dyZXNzSWRzfSlcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2spIHtcbiAgICB1cGRhdGVkU3RhdGUgPSBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IDEsIHR5cGU6ICcnfSkpO1xuICAgIGlmIChwcm9ncmVzc0lkcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgIC4uLmh5ZHJhdGVQcm9ncmVzc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9ucywgcHJvZ3Jlc3NJZHN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgY2xlYXJMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgICAgcHJvZ3Jlc3NJZHNcbiAgICApLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICAvLyBhIGxheWVyIGFscmVhZHkgaW4gYSBwYW5lbCB3YXMgbWVyZ2VkIGZyb20gc3BsaXQgbWFwcywgd2hpY2ggZGVjaWRlIHRoZSBwYW5lbHMgc2hvd2luZyBpdFxuICAgIGNvbnN0IGxheWVyc05vdEluU3BsaXRNYXBzID0gbmV3TGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gIW1lcmdlZFN0YXRlLnNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIGxheWVyc05vdEluU3BsaXRNYXBzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+XG4gICAgICB0bC5maWVsZCAmJiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdXG4gICAgICAgID8gey4uLnRsLCBmaWVsZDogey4uLnRsLmZpZWxkLCBuYW1lOiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdfX1cbiAgICAgICAgOiB0bFxuICAgICk7XG4gICAgaWYgKHRleHRMYWJlbC5zb21lKCh0bCwgaSkgPT4gdGwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaV0pKSB7XG4gICAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSB0ZXh0TGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuYW1lKSA+IC0xKTtcblxuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgU2V0KG5ld1RhYmxlLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbHVtbiBpcyBnb25lOiBkcm9wIGEgc2luZ2xlLWRhdGFzZXQgZmlsdGVyLCBzcGxpY2UgaXQgb3V0IG9mIGEgc3luY2VkIG9uZVxuICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYnJ1c2ggZmlsdGVycyBjYXJyeSBhIHNlY29uZCB5LWF4aXMgZmllbGQ7IGZvbGxvdyBhIHJlbmFtZSB0aGVyZSB0b29cbiAgICAgIGNvbnN0IHlBeGlzID1cbiAgICAgICAgdXBkYXRlZC55QXhpcz8ubmFtZSAmJlxuICAgICAgICAocmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdXG4gICAgICAgICAgPyB7Li4udXBkYXRlZC55QXhpcywgbmFtZTogcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdfVxuICAgICAgICAgIDogbmV3RmllbGRzQnlOYW1lLmhhcyh1cGRhdGVkLnlBeGlzLm5hbWUpXG4gICAgICAgICAgPyB1cGRhdGVkLnlBeGlzXG4gICAgICAgICAgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gcmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gMy4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgKGdwdUZpbHRlciAvIGZpbHRlclJlY29yZCAvIGZpbHRlcmVkSW5kZXgpXG4gIG5ld1RhYmxlLmZpbHRlclRhYmxlKFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKSxcbiAgICB7fVxuICApO1xuXG4gIC8vIDQuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gQXJyYXkuZnJvbShmaWxlcyk7XG4gIGNvbnN0IGZpbGVzVG9Mb2FkID0gZ2V0RmlsZXNUb1BhcnNlKGNvbXBhbmlvbkZpbGVzKTtcbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9ucyxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyA/IG5leHRTdGF0ZS5maWxlTG9hZGluZy5jb21wYW5pb25GaWxlcyA6IHVuZGVmaW5lZFxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soXG4gIGZpbGUsXG4gIGZpbGVDYWNoZSxcbiAgbG9hZGVyczogTG9hZGVyW10gPSBbXSxcbiAgbG9hZE9wdGlvbnMgPSB7fSxcbiAgY29tcGFuaW9uRmlsZXM/OiBGaWxlW11cbikge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnMsIGNvbXBhbmlvbkZpbGVzfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcyksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yKVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cmVzdWx0LCBmaWx0ZXJQcm9wcywgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb3B5IGluLW1lbW9yeSByb3dzIChvciBsb2FkZWQgdmVjdG9yLXRpbGUgZmVhdHVyZXMpIGluc2lkZSB0aGUgc2VsZWN0ZWRcbiAqIERyYXcgb24gTWFwIHBvbHlnb24gaW50byBhIG5ldyBkYXRhc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2xheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuRXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmVhdHVyZSA9IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXI/LmNvbmZpZy5kYXRhSWQ7XG4gIGxldCBkYXRhc2V0ID0gZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IG51bGw7XG5cbiAgaWYgKCFsYXllciB8fCAhZGF0YXNldCB8fCAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gR1BVIHJhbmdlL3RpbWUgZmlsdGVycyBhcmUgbm90IHJlZmxlY3RlZCBpbiBmaWx0ZXJlZEluZGV4OyBldmFsdWF0ZSB0aGVtIG9uIENQVVxuICAvLyB0aGUgc2FtZSB3YXkgZXhwb3J0IGRhdGEgZG9lcywgdGhlbiBjbGlwIHRoZSByZXN1bHQgdG8gdGhlIGRyYXdpbmcuXG4gIGlmICghaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKSkge1xuICAgIHN0YXRlID0gZmlsdGVyRGF0YXNldENQVShzdGF0ZSwgZGF0YUlkKTtcbiAgICBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkO1xuICB0cnkge1xuICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSh7bGF5ZXIsIGRhdGFzZXQsIGZlYXR1cmV9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQucm93Q291bnQpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHZlY3RvciB0aWxlIGZlYXR1cmVzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiAnTm8gcm93cyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlLWVtcHR5J1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9XG4gICAgICBleHRyYWN0ZWQua2luZCA9PT0gJ2dlb2pzb24nXG4gICAgICAgID8gcHJvY2Vzc0dlb2pzb24oe1xuICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIGZlYXR1cmVzOiBleHRyYWN0ZWQuZmVhdHVyZXNcbiAgICAgICAgICB9KVxuICAgICAgICA6IHtmaWVsZHM6IGV4dHJhY3RlZC5maWVsZHMsIHJvd3M6IGV4dHJhY3RlZC5yb3dzfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZXh0cmFjdC0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRXh0cmFjdGVkICR7ZGF0YXNldC5sYWJlbH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcbiAgcmV0dXJuIHBpY2tfKCdhbmltYXRpb25Db25maWcnKShtZXJnZV8odXBkYXRlcykpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25cbik6IFMge1xuICBjb25zdCB7ZXZlbnQsIGxheWVyfSA9IGFjdGlvbjtcbiAgY29uc3Qge2lkOiBkZWNrZ2xMYXllcklkLCBjb3VudH0gPSBldmVudDtcbiAgaWYgKCFsYXllcikge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXJGaWx0ZXJlZEl0ZW1zIGxheWVyIGRvZXNudCBleGlzdHNgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVyLmZpbHRlcmVkSXRlbUNvdW50Py5bZGVja2dsTGF5ZXJJZF0gPT09IGNvdW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQgPSB7XG4gICAgLi4ubGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQsXG4gICAgW2RlY2tnbExheWVySWRdOiBjb3VudFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzd2FwXyhsYXllcikoc3RhdGUubGF5ZXJzKVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBXTVMgZmVhdHVyZSBpbmZvIGFuZCBwaW4gdG9vbHRpcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd21zRmVhdHVyZUluZm9VcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5XTVNGZWF0dXJlSW5mb0FjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZUluZm8sIGNvb3JkaW5hdGV9ID0gYWN0aW9uO1xuICBpZiAoIWxheWVyKSB7XG4gICAgY29uc29sZS53YXJuKGBXTVMgZmVhdHVyZSBpbmZvIGxheWVyIGRvZXNuJ3QgZXhpc3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBjbGlja2VkIG9iamVjdCBzaW1pbGFyIHRvIGxheWVyQ2xpY2tVcGRhdGVyIHRvIHBpbiB0aGUgdG9vbHRpcFxuICBjb25zdCBjbGlja2VkID0gZmVhdHVyZUluZm9cbiAgICA/IHtcbiAgICAgICAgcGlja2VkOiB0cnVlLFxuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICB3bXNGZWF0dXJlSW5mbzogZmVhdHVyZUluZm9cbiAgICAgICAgfSxcbiAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSB8fCBbMCwgMF0sXG4gICAgICAgIGxheWVyOiB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGlkeDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVyLmlkKSxcbiAgICAgICAgICAgIGlkOiBsYXllci5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWRcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4OiBmaWx0ZXJJZHgsIGVuYWJsZSA9IGZhbHNlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuXG4gIC8vIGlmIHdlIGVuYWJsZSBzeW5jIHdlIGFyZSBnb2luZyB0byBtZXJnZSBmaWx0ZXIgYW5kIGFuaW1hdGlvbkNvbmZpZyBkb21haW5zIGFuZCBzdG9yZSBpbnRvIGZpbHRlci5kb21haW5cbiAgaWYgKGVuYWJsZSkge1xuICAgIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhuZXdTdGF0ZS5sYXllcnMpO1xuICAgIC8vIGlmIG5vIGFuaW1hdGFibGVMYXllcnMgYXJlIHByZXNlbnQgd2Ugc2ltcGx5IHJldHVyblxuICAgIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhhbmltYXRhYmxlTGF5ZXJzKTtcbiAgICBjb25zdCBoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIgPSBCb29sZWFuKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoKTtcblxuICAgIGNvbnN0IG5ld0ZpbHRlckRvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMoW2ZpbHRlci5kb21haW4sIG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW5dKTtcblxuICAgIC8vIHdlIG9ubHkgdXBkYXRlIGFuaW1hdGlvbldpbmRvdyBpZiB3ZSBoYXZlIGludGVydmFsIGJhc2VkIGFuaW1hdGlvbiBsYXllcnMgd2l0aCBkZWZpbmVkIGludGVydmFscyBhbmQgdGhlIGN1cnJlbnQgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3cgaXMgbm90IGludGVydmFsXG4gICAgaWYgKGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllcikge1xuICAgICAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpIHtcbiAgICAgICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgICAgaWQ6IGZpbHRlci5pZCxcbiAgICAgICAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAgIC8vIGFkanVzdCB0aW1lIGZpbHRlciBpbnRlcnZhbFxuICAgICAgbmV3RmlsdGVyID0gYWRqdXN0VGltZUZpbHRlckludGVydmFsKG5ld1N0YXRlLCBuZXdGaWx0ZXIpO1xuXG4gICAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIGFkanVzdCB2YWx1ZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKFxuICAgICAgbmV3RmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICA/IFtuZXdGaWx0ZXJEb21haW5bMF0sIG5ld0ZpbHRlckRvbWFpblswXV1cbiAgICAgICAgOiBuZXdGaWx0ZXJEb21haW4sXG4gICAgICB7Li4ubmV3RmlsdGVyLCBkb21haW46IG5ld0ZpbHRlckRvbWFpbn1cbiAgICApO1xuXG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgIC4uLihuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyKSxcbiAgICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgIH07XG5cbiAgICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIHNldCB0aGUgYW5pbWF0aW9uIGNvbmZpZyB2YWx1ZSB0byBtYXRjaCBmaWx0ZXIgdmFsdWVcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgdmFsdWU6IG5ld0ZpbHRlci52YWx1ZVtuZXdGaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBkb21haW4gYW5kIHN0ZXBcbiAgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2VcbiAgfTtcblxuICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgfTtcblxuICAvLyByZXNldCBzeW5jIHRpbWVsaW5lIG1vZGVcbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogU1lOQ19USU1FTElORV9NT0RFUy5lbmRcbiAgfSk7XG5cbiAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAvLyByZXNldCBmaWx0ZXIgdmFsdWVcbiAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5ld0ZpbHRlci5kb21haW4sIG5ld0ZpbHRlcik7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICB9KTtcblxuICAvLyByZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0b1xuICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIHZhbHVlOiBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluPy5bMF0gPz8gbnVsbFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5zZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZUFjdGlvblxuKSB7XG4gIGNvbnN0IHtpZDogZmlsdGVySWQsIG1vZGU6IHN5bmNUaW1lbGluZU1vZGV9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgaWYgKCF2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlciwgc3luY1RpbWVsaW5lTW9kZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNUaW1lbGluZU1vZGVcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICByZXR1cm4gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgZmlsdGVySWR4KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgb2YgdGhlIGxvYWRpbmcgaW5kaWNhdG9yLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSB2aXNTdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBheWxvYWQgd2l0aCBjaGFuZ2Ugb2YgbnVtYmVyIG9mIGFjdGl2ZSBsb2FkaW5nIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtwYXlsb2FkOiB7Y2hhbmdlfX06IHtwYXlsb2FkOiBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZH1cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IHtsb2FkaW5nSW5kaWNhdG9yVmFsdWV9ID0gc3RhdGU7XG4gIGlmICghbG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlID0gMDtcbiAgfVxuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKG5leHRWYWx1ZSA9PT0gMCAmJiBPYmplY3Qua2V5cyhzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge30pLmxlbmd0aFxuICAgICAgPyB7bG9hZGluZ1Byb2dyZXNzOiB7fX1cbiAgICAgIDoge30pXG4gIH07XG59O1xuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IGh5ZHJhdGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKHN0YXRlLmxvYWRpbmdQcm9ncmVzcz8uW2lkXSA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgIFtpZF06IG5leHRQZXJjZW50XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGZpbHRlcklkeDogbnVtYmVyKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgaWYgKChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkge1xuICAgIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwc1xuICAgICAgPyBzbmFwVG9NYXJrcyh0aW1lbGluZVZhbHVlLCBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzKVxuICAgICAgOiB0aW1lbGluZVZhbHVlO1xuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKHN0YXRlLCB7dmFsdWV9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyLnZhbHVlW2ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSkge1xuICAgIHJldHVybiBmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZSA/PyBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbiAgfVxuXG4gIHJldHVybiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciwgbmV3TW9kZTogbnVtYmVyKSB7XG4gIHJldHVybiAhKFxuICAgIGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSAmJiBuZXdNb2RlID09PSBTWU5DX1RJTUVMSU5FX01PREVTLnN0YXJ0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChzdGF0ZSwgZmlsdGVyKSB7XG4gIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgbGV0IGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbEluZGV4ID0gaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5yZWR1Y2UoKGN1cnJlbnRJbmRleCwgbCkgPT4ge1xuICAgICAgaWYgKGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmZpbmRJbmRleChpID0+IGkgPT09IGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gbmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCA8IGN1cnJlbnRJbmRleCA/IG5ld0luZGV4IDogY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0sIFRJTUVfSU5URVJWQUxTX09SREVSRUQubGVuZ3RoIC0gMSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGxheWVyVGltZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbbGF5ZXJUaW1lSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3JkZXIgdG8gcHJlc2VydmUgZm9yIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgbWVyZ2VkIGJhY2suXG4gKlxuICogYGlkc2AgY29tZXMgZnJvbSB0aGUgc2VyaWFsaXplZCBzdGF0ZSwgc28gaXQgbGlzdHMgZXZlcnl0aGluZyBidXQgdGhlIGl0ZW1zXG4gKiBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvOiBhbiBhcHAgcmVmcmVzaGluZyBzZXZlcmFsXG4gKiBkYXRhc2V0cyBpbiBhIHJvdyBwcmVwYXJlcyB0aGUgc2Vjb25kIHJlcGxhY2VtZW50IGJlZm9yZSB0aGUgZmlyc3Qgb25lJ3NcbiAqIGl0ZW1zIGhhdmUgbWVyZ2VkIGJhY2suIFdyaXRpbmcgYGlkc2AgYXMgaXQgaXMgd291bGQgZHJvcCB0aG9zZSwgYW5kXG4gKiBgaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcmAgcHV0cyBhbiBpdGVtIGl0IGNhbm5vdCBwbGFjZSBhdCB0aGUgZnJvbnQg4oCUXG4gKiBzbyB0aGV5IHdvdWxkIGNvbWUgYmFjayByZXZlcnNlZC4gV2hlcmUgdGhleSBiZWxvbmcgaXMgd2hhdCB0aGUgb3JkZXIgd3JpdHRlblxuICogd2hlbiB0aGV5IHdlcmUgcGFya2VkIGFscmVhZHkgc2F5cywgc28gdGhhdCBvcmRlciBpcyBrZXB0IGZvciB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICBwcmV2aW91c09yZGVyOiBzdHJpbmdbXSA9IFtdLFxuICBpZHM6IHN0cmluZ1tdLFxuICBwYXJrZWQ6IHtpZD86IHN0cmluZ31bXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJrZWRJZHMgPSBwYXJrZWRcbiAgICAubWFwKGl0ZW0gPT4gaXRlbT8uaWQpXG4gICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgIWlkcy5pbmNsdWRlcyhpZCBhcyBzdHJpbmcpKTtcblxuICBpZiAoIXBhcmtlZElkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgY29uc3Qga25vd24gPSBuZXcgU2V0KFsuLi5pZHMsIC4uLnBhcmtlZElkc10pO1xuICBjb25zdCBvcmRlcmVkID0gKHByZXZpb3VzT3JkZXIgfHwgW10pLmZpbHRlcihpZCA9PiBrbm93bi5oYXMoaWQpKTtcbiAgY29uc3QgcmVzdCA9IFsuLi5pZHMsIC4uLnBhcmtlZElkc10uZmlsdGVyKGlkID0+ICFvcmRlcmVkLmluY2x1ZGVzKGlkKSk7XG5cbiAgcmV0dXJuIFsuLi5vcmRlcmVkLCAuLi5yZXN0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2hhdCBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvIGFuZCBoYXMgbm90XG4gICAgICAgIC8vIG1lcmdlZCBiYWNrIHlldCwgcmVhZCBiZWZvcmUgdGhpcyBvbmUgcGFya3MgYW55dGhpbmcgb2YgaXRzIG93bi5cbiAgICAgICAgY29uc3QgcGFya2VkRWxzZXdoZXJlID1cbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdG9BcnJheShyZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdID8/IFtdKVxuICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0sXG4gICAgICAgICAgICBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCksXG4gICAgICAgICAgICBwYXJrZWRFbHNld2hlcmVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFB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