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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,16 +35,16 @@ import { DELAY_TASK, ACTION_TASK, LOAD_FILE_TASK, PROCESS_FILE_DATA, UNWRAP_TASK
35
35
  import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress } from '@kepler.gl/actions';
36
36
 
37
37
  // Utils
38
- import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
38
+ import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
39
39
  import { generateHashId, toArray, arrayMove } from '@kepler.gl/common-utils';
40
40
  // Mergers
41
41
  import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat } from '@kepler.gl/constants';
42
42
  import { LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
43
43
  import { apply_, compose_, filterOutById, merge_, payload_, pick_, removeElementAtIndex, swap_ } from './composer-helpers';
44
44
  import { isValidMerger, mergeStateFromMergers } from './merger-handler';
45
- import { VIS_STATE_MERGERS, createLayerFromConfig, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
45
+ import { VIS_STATE_MERGERS, createLayerFromConfig, isSavedLayerConfigV1, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
46
46
  import KeplerGLSchema from '@kepler.gl/schemas';
47
- import { loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
47
+ import { getFilesToParse, loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
48
48
  import { assignGpuChannel, copyTableAndUpdate, createNewDataEntry, pinTableColumns, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
49
49
  import { findFieldsToShow } from './interaction-utils';
50
50
  import { calculateLayerData, findDefaultLayer, getLayerOrderFromLayers, mergeLayerVisConfigForNewDatasets, getNewLayerGroup, addLayerOrGroupToLayerOrder, removeElementFromLayerOrder, getLayerGroupFromLayerOrder, findParentGroupForLayer, getIndexFromLayerEntryId, updateLayerGroupInLayerOrder, getFlatLayerOrder, replaceLayerEntryInLayerOrder } from './layer-utils';
@@ -180,6 +180,9 @@ export var INITIAL_VIS_STATE = {
180
180
  // effects
181
181
  effects: [],
182
182
  effectOrder: [],
183
+ // charts (enabled by default; gated by enableChartsPanel)
184
+ charts: [],
185
+ chartsToBeMerged: [],
183
186
  // annotations
184
187
  annotations: [],
185
188
  annotationsToBeMerged: [],
@@ -288,9 +291,9 @@ export function applyLayerConfigUpdater(state, action) {
288
291
  var oldLayerId = action.oldLayerId,
289
292
  newLayerConfig = action.newLayerConfig,
290
293
  layerIndex = action.layerIndex;
291
- var newParsedLayer =
292
- // will move visualChannels to the config prop
293
- parseLayerConfig(state.schema, newLayerConfig);
294
+ // Saved configs have a visualChannels sibling; parsed/editor JSON folds those
295
+ // fields into config. Re-parsing the latter drops colorField and resets the scale.
296
+ var newParsedLayer = isSavedLayerConfigV1(newLayerConfig) ? parseLayerConfig(state.schema, newLayerConfig) : newLayerConfig;
294
297
  var oldLayer = state.layers.find(function (l) {
295
298
  return l.id === oldLayerId;
296
299
  });
@@ -962,6 +965,20 @@ export function layerVisConfigChangeUpdater(state, action) {
962
965
  var newLayer = oldLayer.updateLayerConfig({
963
966
  visConfig: newVisConfig
964
967
  });
968
+
969
+ // Jenks breaks depend on the number of colors. Recalculate the domain when
970
+ // the color range of a Jenks channel changes.
971
+ if (oldLayer.config.dataId) {
972
+ var dataset = state.datasets[oldLayer.config.dataId];
973
+ if (dataset) {
974
+ Object.keys(newLayer.visualChannels).forEach(function (channelKey) {
975
+ var channel = newLayer.visualChannels[channelKey];
976
+ if (channel !== null && channel !== void 0 && channel.scale && newLayer.config[channel.scale] === SCALE_TYPES.jenks && channel.range && Object.prototype.hasOwnProperty.call(action.newVisConfig, channel.range)) {
977
+ newLayer.updateLayerVisualChannel(dataset, channelKey);
978
+ }
979
+ });
980
+ }
981
+ }
965
982
  var nextState = state;
966
983
 
967
984
  // Exclusive bitmap editing: when editBounds is turned on for one bitmap layer,
@@ -1683,7 +1700,9 @@ export function removeLayerUpdater(state, _ref9) {
1683
1700
  splitMaps: removeLayerFromSplitMaps(state.splitMaps, layerToRemove)
1684
1701
  // TODO: update filters, create helper to remove layer form filter (remove layerid and dataid) if mapped
1685
1702
  });
1686
- return updateAnimationDomain(newState);
1703
+ return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
1704
+ return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
1705
+ }));
1687
1706
  }
1688
1707
 
1689
1708
  /**
@@ -2134,16 +2153,169 @@ export var updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
2134
2153
  effectOrder: effectOrder
2135
2154
  });
2136
2155
  };
2156
+ function isLayerChartConfig(chart) {
2157
+ return chart.type === 'layerChart';
2158
+ }
2159
+ function mergeChartConfig(chart, props) {
2160
+ return _objectSpread(_objectSpread(_objectSpread({}, chart), props), {}, {
2161
+ display: _objectSpread(_objectSpread({}, chart.display), props.display || {}),
2162
+ chartDisplay: _objectSpread(_objectSpread({}, chart.chartDisplay), props.chartDisplay || {})
2163
+ });
2164
+ }
2165
+ function axisFieldIfPresent(axis, fieldNames) {
2166
+ var _axis$field;
2167
+ if (!(axis !== null && axis !== void 0 && (_axis$field = axis.field) !== null && _axis$field !== void 0 && _axis$field.name) || fieldNames.has(axis.field.name)) {
2168
+ return axis;
2169
+ }
2170
+ return _objectSpread(_objectSpread({}, axis), {}, {
2171
+ field: null,
2172
+ title: null
2173
+ });
2174
+ }
2175
+ function dropMissingChartFields(chart, dataset) {
2176
+ var fieldNames = new Set(((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).map(function (field) {
2177
+ return field.name;
2178
+ }));
2179
+ var next = chart;
2180
+ return mergeChartConfig(chart, {
2181
+ xAxis: axisFieldIfPresent(next.xAxis, fieldNames),
2182
+ yAxis: axisFieldIfPresent(next.yAxis, fieldNames),
2183
+ axis: axisFieldIfPresent(next.axis, fieldNames),
2184
+ groupBy: axisFieldIfPresent(next.groupBy, fieldNames),
2185
+ value: axisFieldIfPresent(next.value, fieldNames)
2186
+ });
2187
+ }
2188
+ function removeChartsAndFilters(state, shouldRemove) {
2189
+ var charts = state.charts || [];
2190
+ var removed = charts.filter(shouldRemove);
2191
+ if (!removed.length) {
2192
+ return state;
2193
+ }
2194
+ var removedIds = new Set(removed.map(function (chart) {
2195
+ return chart.id;
2196
+ }));
2197
+ var filterIds = new Set(removed.flatMap(function (chart) {
2198
+ var _chart$crossFilter;
2199
+ var id = (_chart$crossFilter = chart.crossFilter) === null || _chart$crossFilter === void 0 ? void 0 : _chart$crossFilter.filterId;
2200
+ return id ? [id, "".concat(id, "-x"), "".concat(id, "-y")] : [];
2201
+ }));
2202
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2203
+ charts: charts.filter(function (chart) {
2204
+ return !removedIds.has(chart.id);
2205
+ })
2206
+ });
2207
+ if (filterIds.size) {
2208
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2209
+ return filterIds.has(filter.id) ? removeFilterUpdater(accu, {
2210
+ idx: idx
2211
+ }) : accu;
2212
+ }, nextState);
2213
+ }
2214
+ return nextState;
2215
+ }
2216
+
2217
+ /**
2218
+ * Add a chart
2219
+ * @memberof visStateUpdaters
2220
+ * @public
2221
+ */
2222
+ export var addChartUpdater = function addChartUpdater(state, _ref13) {
2223
+ var _chart$display$isConf, _chart$display;
2224
+ var chart = _ref13.chart;
2225
+ if (!(chart !== null && chart !== void 0 && chart.id)) {
2226
+ return state;
2227
+ }
2228
+ if ((state.charts || []).some(function (existing) {
2229
+ return existing.id === chart.id;
2230
+ })) {
2231
+ return state;
2232
+ }
2233
+ return _objectSpread(_objectSpread({}, state), {}, {
2234
+ charts: [].concat(_toConsumableArray((state.charts || []).map(function (existing) {
2235
+ return _objectSpread(_objectSpread({}, existing), {}, {
2236
+ display: _objectSpread(_objectSpread({}, existing.display), {}, {
2237
+ isConfigActive: false
2238
+ })
2239
+ });
2240
+ })), [_objectSpread(_objectSpread({}, chart), {}, {
2241
+ display: _objectSpread(_objectSpread({}, chart.display), {}, {
2242
+ 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
2243
+ })
2244
+ })])
2245
+ });
2246
+ };
2247
+
2248
+ /**
2249
+ * Update a chart
2250
+ * @memberof visStateUpdaters
2251
+ * @public
2252
+ */
2253
+ export var updateChartUpdater = function updateChartUpdater(state, _ref14) {
2254
+ var _next$crossFilter2, _prev$crossFilter, _prev$crossFilter2, _next$crossFilter3;
2255
+ var id = _ref14.id,
2256
+ props = _ref14.props;
2257
+ var idx = (state.charts || []).findIndex(function (chart) {
2258
+ return chart.id === id;
2259
+ });
2260
+ if (idx < 0) {
2261
+ return state;
2262
+ }
2263
+ var prev = state.charts[idx];
2264
+ var dataIdChanged = typeof props.dataId === 'string' && props.dataId !== prev.dataId;
2265
+ var layerIdChanged = isLayerChartConfig(prev) && typeof props.layerId === 'string' && props.layerId !== prev.layerId;
2266
+ var next = mergeChartConfig(prev, props);
2267
+ if (dataIdChanged || layerIdChanged) {
2268
+ var _next$crossFilter;
2269
+ var dataId = next.dataId || undefined;
2270
+ next = dropMissingChartFields(next, dataId ? state.datasets[dataId] : undefined);
2271
+ if ((_next$crossFilter = next.crossFilter) !== null && _next$crossFilter !== void 0 && _next$crossFilter.enabled) {
2272
+ next = mergeChartConfig(next, {
2273
+ crossFilter: _objectSpread(_objectSpread({}, next.crossFilter), {}, {
2274
+ enabled: false,
2275
+ value: {},
2276
+ fieldNames: {}
2277
+ })
2278
+ });
2279
+ }
2280
+ }
2281
+ var charts = _toConsumableArray(state.charts);
2282
+ charts[idx] = next;
2283
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
2284
+ charts: charts
2285
+ });
2286
+ 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);
2287
+ 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) {
2288
+ var ownedFilterIds = new Set([filterId, "".concat(filterId, "-x"), "".concat(filterId, "-y")]);
2289
+ nextState = nextState.filters.reduceRight(function (accu, filter, idx) {
2290
+ return ownedFilterIds.has(filter.id) ? removeFilterUpdater(accu, {
2291
+ idx: idx
2292
+ }) : accu;
2293
+ }, nextState);
2294
+ }
2295
+ return nextState;
2296
+ };
2297
+
2298
+ /**
2299
+ * Remove a chart and any cross-filter it owns
2300
+ * @memberof visStateUpdaters
2301
+ * @public
2302
+ */
2303
+ export var removeChartUpdater = function removeChartUpdater(state, _ref15) {
2304
+ var id = _ref15.id;
2305
+ return removeChartsAndFilters(state, function (chart) {
2306
+ return chart.id === id;
2307
+ });
2308
+ };
2137
2309
 
2138
2310
  // ANNOTATION UPDATERS
2139
2311
 
2140
2312
  function makeNewAnnotation(config) {
2141
- 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;
2313
+ 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;
2142
2314
  var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : INITIAL_ANNOTATION_KIND;
2143
2315
  var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
2144
2316
  var derivedFromAngle = providedAngle != null ? textPlacementFromAngle(providedAngle) : undefined;
2145
- 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 === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_SIDE;
2146
- 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 === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2317
+ 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 === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_SIDE;
2318
+ 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 === AnnotationKind.TEXT ? undefined : INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2147
2319
  var base = _objectSpread(_objectSpread(_objectSpread({
2148
2320
  id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : generateHashId(6),
2149
2321
  kind: kind,
@@ -2212,8 +2384,8 @@ export var addAnnotationUpdater = function addAnnotationUpdater(state, action) {
2212
2384
  * @memberof visStateUpdaters
2213
2385
  * @public
2214
2386
  */
2215
- export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
2216
- var id = _ref15.id;
2387
+ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref18) {
2388
+ var id = _ref18.id;
2217
2389
  return _objectSpread(_objectSpread({}, state), {}, {
2218
2390
  annotations: state.annotations.filter(function (a) {
2219
2391
  return a.id !== id;
@@ -2228,9 +2400,9 @@ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _re
2228
2400
  * @memberof visStateUpdaters
2229
2401
  * @public
2230
2402
  */
2231
- export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
2232
- var id = _ref16.id,
2233
- config = _ref16.config;
2403
+ export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref19) {
2404
+ var id = _ref19.id,
2405
+ config = _ref19.config;
2234
2406
  var idx = state.annotations.findIndex(function (a) {
2235
2407
  return a.id === id;
2236
2408
  });
@@ -2257,8 +2429,8 @@ export var updateAnnotationUpdater = function updateAnnotationUpdater(state, _re
2257
2429
  * @memberof visStateUpdaters
2258
2430
  * @public
2259
2431
  */
2260
- export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
2261
- var id = _ref17.id;
2432
+ export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref20) {
2433
+ var id = _ref20.id;
2262
2434
  var original = state.annotations.find(function (a) {
2263
2435
  return a.id === id;
2264
2436
  });
@@ -2282,9 +2454,9 @@ export var duplicateAnnotationUpdater = function duplicateAnnotationUpdater(stat
2282
2454
  * @memberof visStateUpdaters
2283
2455
  * @public
2284
2456
  */
2285
- export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
2286
- var id = _ref18.id,
2287
- isEditingText = _ref18.isEditingText;
2457
+ export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref21) {
2458
+ var id = _ref21.id,
2459
+ isEditingText = _ref21.isEditingText;
2288
2460
  if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2289
2461
  return state;
2290
2462
  }
@@ -2351,12 +2523,20 @@ export function removeDatasetUpdater(state, action) {
2351
2523
  newState = _objectSpread(_objectSpread({}, newState), {}, {
2352
2524
  filters: filters
2353
2525
  });
2354
- return removeDatasetFromInteractionConfig(newState, {
2526
+ return removeChartsAndFilters(removeDatasetFromInteractionConfig(newState, {
2355
2527
  dataId: datasetKey
2528
+ }), function (chart) {
2529
+ if (chart.dataId === datasetKey) {
2530
+ return true;
2531
+ }
2532
+ if (isLayerChartConfig(chart)) {
2533
+ return layersToRemove.includes(chart.layerId);
2534
+ }
2535
+ return false;
2356
2536
  });
2357
2537
  }
2358
- function removeDatasetFromInteractionConfig(state, _ref19) {
2359
- var dataId = _ref19.dataId;
2538
+ function removeDatasetFromInteractionConfig(state, _ref22) {
2539
+ var dataId = _ref22.dataId;
2360
2540
  var interactionConfig = state.interactionConfig;
2361
2541
  var _interactionConfig = interactionConfig,
2362
2542
  tooltip = _interactionConfig.tooltip;
@@ -2441,12 +2621,12 @@ export var resetMapConfigUpdater = function resetMapConfigUpdater(state) {
2441
2621
  * @memberof visStateUpdaters
2442
2622
  * @public
2443
2623
  */
2444
- export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
2445
- var _ref20$payload = _ref20.payload,
2446
- _ref20$payload$config = _ref20$payload.config,
2447
- config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
2448
- _ref20$payload$option = _ref20$payload.options,
2449
- options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
2624
+ export var receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref23) {
2625
+ var _ref23$payload = _ref23.payload,
2626
+ _ref23$payload$config = _ref23$payload.config,
2627
+ config = _ref23$payload$config === void 0 ? {} : _ref23$payload$config,
2628
+ _ref23$payload$option = _ref23$payload.options,
2629
+ options = _ref23$payload$option === void 0 ? {} : _ref23$payload$option;
2450
2630
  if (!config.visState) {
2451
2631
  return state;
2452
2632
  }
@@ -2551,8 +2731,8 @@ export var mapClickUpdater = function mapClickUpdater(state, action) {
2551
2731
  * @memberof visStateUpdaters
2552
2732
  * @public
2553
2733
  */
2554
- export var mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
2555
- var evt = _ref21.evt;
2734
+ export var mouseMoveUpdater = function mouseMoveUpdater(state, _ref24) {
2735
+ var evt = _ref24.evt;
2556
2736
  if (Object.values(state.interactionConfig).some(function (config) {
2557
2737
  return config.enabled;
2558
2738
  })) {
@@ -2586,9 +2766,9 @@ export var toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action)
2586
2766
  * @memberof visStateUpdaters
2587
2767
  * @public
2588
2768
  */
2589
- export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
2590
- var mapIndex = _ref22.mapIndex,
2591
- layerId = _ref22.layerId;
2769
+ export var toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref25) {
2770
+ var mapIndex = _ref25.mapIndex,
2771
+ layerId = _ref25.layerId;
2592
2772
  var splitMaps = state.splitMaps;
2593
2773
  return _objectSpread(_objectSpread({}, state), {}, {
2594
2774
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2659,7 +2839,7 @@ function _hydrateExternallyHostedProtoDataset() {
2659
2839
  }
2660
2840
  var HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromise(hydrateExternallyHostedProtoDataset, 'HYDRATE_EXTERNALLY_HOSTED_DATASET_TASK');
2661
2841
  var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
2662
- var _ref23 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(message) {
2842
+ var _ref26 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(message) {
2663
2843
  return _regeneratorRuntime.wrap(function _callee$(_context) {
2664
2844
  while (1) switch (_context.prev = _context.next) {
2665
2845
  case 0:
@@ -2671,7 +2851,7 @@ var FAIL_CREATE_DATASET_TASK = Task.fromPromise(/*#__PURE__*/function () {
2671
2851
  }, _callee);
2672
2852
  }));
2673
2853
  return function (_x2) {
2674
- return _ref23.apply(this, arguments);
2854
+ return _ref26.apply(this, arguments);
2675
2855
  };
2676
2856
  }(), 'FAIL_CREATE_DATASET_TASK');
2677
2857
  function createNewDataEntryTask(dataset, datasets) {
@@ -2692,12 +2872,12 @@ function refreshExternallyHostedTable(_x3) {
2692
2872
  return _refreshExternallyHostedTable.apply(this, arguments);
2693
2873
  }
2694
2874
  function _refreshExternallyHostedTable() {
2695
- _refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref24) {
2875
+ _refreshExternallyHostedTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref27) {
2696
2876
  var metadata, onProgress;
2697
2877
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
2698
2878
  while (1) switch (_context3.prev = _context3.next) {
2699
2879
  case 0:
2700
- metadata = _ref24.arg, onProgress = _ref24.onProgress;
2880
+ metadata = _ref27.arg, onProgress = _ref27.onProgress;
2701
2881
  return _context3.abrupt("return", loadExternallyHostedDataset(_objectSpread(_objectSpread({}, metadata), {}, {
2702
2882
  onProgress: onProgress,
2703
2883
  bypassCache: true
@@ -2718,9 +2898,9 @@ var REFRESH_EXTERNALLY_HOSTED_DATASET_TASK = Task.fromPromiseWithProgress(refres
2718
2898
  * @memberof visStateUpdaters
2719
2899
  * @public
2720
2900
  */
2721
- export function refreshDatasetUpdater(state, _ref25) {
2901
+ export function refreshDatasetUpdater(state, _ref28) {
2722
2902
  var _dataset$metadata2, _dataset$metadata3;
2723
- var dataId = _ref25.dataId;
2903
+ var dataId = _ref28.dataId;
2724
2904
  var dataset = state.datasets[dataId];
2725
2905
  if (!dataset || dataset.type !== DatasetType.EXTERNALLY_HOSTED || typeof ((_dataset$metadata2 = dataset.metadata) === null || _dataset$metadata2 === void 0 ? void 0 : _dataset$metadata2.source) !== 'string') {
2726
2906
  return state;
@@ -2759,10 +2939,10 @@ export function refreshDatasetUpdater(state, _ref25) {
2759
2939
  * @memberof visStateUpdaters
2760
2940
  * @public
2761
2941
  */
2762
- export function refreshDatasetProgressUpdater(state, _ref26) {
2942
+ export function refreshDatasetProgressUpdater(state, _ref29) {
2763
2943
  var _dataset$metadata4, _dataset$metadata5;
2764
- var dataId = _ref26.dataId,
2765
- percent = _ref26.percent;
2944
+ var dataId = _ref29.dataId,
2945
+ percent = _ref29.percent;
2766
2946
  var dataset = state.datasets[dataId];
2767
2947
  if (!dataset || ((_dataset$metadata4 = dataset.metadata) === null || _dataset$metadata4 === void 0 ? void 0 : _dataset$metadata4.refreshStatus) !== 'loading') {
2768
2948
  return state;
@@ -2852,10 +3032,10 @@ function rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets) {
2852
3032
  * @memberof visStateUpdaters
2853
3033
  * @public
2854
3034
  */
2855
- export function refreshDatasetSuccessUpdater(state, _ref27) {
3035
+ export function refreshDatasetSuccessUpdater(state, _ref30) {
2856
3036
  var _result$data;
2857
- var dataId = _ref27.dataId,
2858
- result = _ref27.result;
3037
+ var dataId = _ref30.dataId,
3038
+ result = _ref30.result;
2859
3039
  var dataset = state.datasets[dataId];
2860
3040
  if (!dataset) {
2861
3041
  return state;
@@ -2949,10 +3129,10 @@ function normalizeDatasetRows(rows, fields) {
2949
3129
  * @memberof visStateUpdaters
2950
3130
  * @public
2951
3131
  */
2952
- export function addToDatasetUpdater(state, _ref28) {
2953
- var dataId = _ref28.dataId,
2954
- rows = _ref28.rows,
2955
- options = _ref28.options;
3132
+ export function addToDatasetUpdater(state, _ref31) {
3133
+ var dataId = _ref31.dataId,
3134
+ rows = _ref31.rows,
3135
+ options = _ref31.options;
2956
3136
  var dataset = state.datasets[dataId];
2957
3137
  if (!dataset) {
2958
3138
  return state;
@@ -2977,10 +3157,10 @@ export function addToDatasetUpdater(state, _ref28) {
2977
3157
  * @memberof visStateUpdaters
2978
3158
  * @public
2979
3159
  */
2980
- export function removeFromDatasetUpdater(state, _ref29) {
2981
- var dataId = _ref29.dataId,
2982
- rowIndexes = _ref29.rowIndexes,
2983
- byField = _ref29.byField;
3160
+ export function removeFromDatasetUpdater(state, _ref32) {
3161
+ var dataId = _ref32.dataId,
3162
+ rowIndexes = _ref32.rowIndexes,
3163
+ byField = _ref32.byField;
2984
3164
  var dataset = state.datasets[dataId];
2985
3165
  if (!dataset) {
2986
3166
  return state;
@@ -3003,9 +3183,9 @@ export function removeFromDatasetUpdater(state, _ref29) {
3003
3183
  * @memberof visStateUpdaters
3004
3184
  * @public
3005
3185
  */
3006
- export function refreshDatasetErrorUpdater(state, _ref30) {
3007
- var dataId = _ref30.dataId,
3008
- error = _ref30.error;
3186
+ export function refreshDatasetErrorUpdater(state, _ref33) {
3187
+ var dataId = _ref33.dataId,
3188
+ error = _ref33.error;
3009
3189
  var dataset = state.datasets[dataId];
3010
3190
  if (!dataset) {
3011
3191
  return state;
@@ -3045,10 +3225,10 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3045
3225
  }
3046
3226
  var createDatasetTasks = [];
3047
3227
  var notificationTasks = [];
3048
- datasets.forEach(function (_ref31, datasetIndex) {
3049
- var _ref31$info = _ref31.info,
3050
- info = _ref31$info === void 0 ? {} : _ref31$info,
3051
- rest = _objectWithoutProperties(_ref31, _excluded2);
3228
+ datasets.forEach(function (_ref34, datasetIndex) {
3229
+ var _ref34$info = _ref34.info,
3230
+ info = _ref34$info === void 0 ? {} : _ref34$info,
3231
+ rest = _objectWithoutProperties(_ref34, _excluded2);
3052
3232
  var task = createNewDataEntryTask(_objectSpread({
3053
3233
  info: info
3054
3234
  }, rest), state.datasets);
@@ -3196,8 +3376,14 @@ function postMergeUpdater(mergedState, postMergerPayload) {
3196
3376
  newLayers = mergedState.layers.filter(function (l) {
3197
3377
  return l.config.dataId && newDataIds.includes(l.config.dataId);
3198
3378
  });
3379
+ // a layer already in a panel was merged from split maps, which decide the panels showing it
3380
+ var layersNotInSplitMaps = newLayers.filter(function (l) {
3381
+ return !mergedState.splitMaps.some(function (sm) {
3382
+ return l.id in sm.layers;
3383
+ });
3384
+ });
3199
3385
  mergedState = _objectSpread(_objectSpread({}, mergedState), {}, {
3200
- splitMaps: addNewLayersToSplitMap(mergedState.splitMaps, newLayers)
3386
+ splitMaps: addNewLayersToSplitMap(mergedState.splitMaps, layersNotInSplitMaps)
3201
3387
  });
3202
3388
  }
3203
3389
  mergedState = mergeLayerVisConfigForNewDatasets(mergedState, layerVisConfigFromAddDataOptions(options), newDataIds);
@@ -3346,10 +3532,10 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3346
3532
  // follow renamed columns
3347
3533
  var columnsPatch = {};
3348
3534
  var columnsChanged = false;
3349
- Object.entries(layer.config.columns || {}).forEach(function (_ref32) {
3350
- var _ref33 = _slicedToArray(_ref32, 2),
3351
- ckey = _ref33[0],
3352
- col = _ref33[1];
3535
+ Object.entries(layer.config.columns || {}).forEach(function (_ref35) {
3536
+ var _ref36 = _slicedToArray(_ref35, 2),
3537
+ ckey = _ref36[0],
3538
+ col = _ref36[1];
3353
3539
  if (col !== null && col !== void 0 && col.value && renames[col.value]) {
3354
3540
  columnsPatch[ckey] = _objectSpread(_objectSpread({}, col), {}, {
3355
3541
  value: renames[col.value]
@@ -3362,8 +3548,8 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3362
3548
  }
3363
3549
 
3364
3550
  // follow renamed visual-channel fields (colorField, sizeField, ...)
3365
- Object.values(layer.visualChannels).forEach(function (_ref34) {
3366
- var field = _ref34.field;
3551
+ Object.values(layer.visualChannels).forEach(function (_ref37) {
3552
+ var field = _ref37.field;
3367
3553
  var fieldConfig = layer.config[field];
3368
3554
  if (fieldConfig !== null && fieldConfig !== void 0 && fieldConfig.name && renames[fieldConfig.name]) {
3369
3555
  configPatch[field] = _objectSpread(_objectSpread({}, fieldConfig), {}, {
@@ -3591,12 +3777,18 @@ export var loadFilesUpdater = function loadFilesUpdater(state, action) {
3591
3777
  if (!files.length) {
3592
3778
  return state;
3593
3779
  }
3594
- var fileLoadingProgress = Array.from(files).reduce(function (accu, f, i) {
3780
+ var companionFiles = Array.from(files);
3781
+ var filesToLoad = getFilesToParse(companionFiles);
3782
+ if (!filesToLoad.length) {
3783
+ return state;
3784
+ }
3785
+ var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
3595
3786
  return merge_(initialFileLoadingProgress(f, i))(accu);
3596
3787
  }, {});
3597
3788
  var fileLoading = {
3598
3789
  fileCache: [],
3599
- filesToLoad: files,
3790
+ filesToLoad: filesToLoad,
3791
+ companionFiles: companionFiles,
3600
3792
  onFinish: onFinish
3601
3793
  };
3602
3794
  var nextState = merge_({
@@ -3666,16 +3858,18 @@ export function loadNextFileUpdater(state) {
3666
3858
  });
3667
3859
  var loaders = state.loaders,
3668
3860
  loadOptions = state.loadOptions;
3669
- return withTask(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions));
3861
+ return withTask(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions, nextState.fileLoading ? nextState.fileLoading.companionFiles : undefined));
3670
3862
  }
3671
3863
  export function makeLoadFileTask(file, fileCache) {
3672
3864
  var loaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
3673
3865
  var loadOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
3866
+ var companionFiles = arguments.length > 4 ? arguments[4] : undefined;
3674
3867
  return LOAD_FILE_TASK({
3675
3868
  file: file,
3676
3869
  fileCache: fileCache,
3677
3870
  loaders: loaders,
3678
- loadOptions: loadOptions
3871
+ loadOptions: loadOptions,
3872
+ companionFiles: companionFiles
3679
3873
  }).bimap(
3680
3874
  // prettier ignore
3681
3875
  // success
@@ -3745,14 +3939,14 @@ export function parseProgress() {
3745
3939
  * @memberof visStateUpdaters
3746
3940
  * @public
3747
3941
  */
3748
- export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
3942
+ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref38) {
3749
3943
  var _accumulated$data;
3750
- var _ref35$payload = _ref35.payload,
3751
- gen = _ref35$payload.gen,
3752
- fileName = _ref35$payload.fileName,
3753
- progress = _ref35$payload.progress,
3754
- accumulated = _ref35$payload.accumulated,
3755
- onFinish = _ref35$payload.onFinish;
3944
+ var _ref38$payload = _ref38.payload,
3945
+ gen = _ref38$payload.gen,
3946
+ fileName = _ref38$payload.fileName,
3947
+ progress = _ref38$payload.progress,
3948
+ accumulated = _ref38$payload.accumulated,
3949
+ onFinish = _ref38$payload.onFinish;
3756
3950
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3757
3951
  fileName: fileName,
3758
3952
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -3769,9 +3963,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
3769
3963
  return loadFilesSuccess(result);
3770
3964
  }, function (err) {
3771
3965
  return loadFilesErr(fileName, err);
3772
- })] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref36) {
3773
- var value = _ref36.value,
3774
- done = _ref36.done;
3966
+ })] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref39) {
3967
+ var value = _ref39.value,
3968
+ done = _ref39.done;
3775
3969
  return done ? onFinish(accumulated) : nextFileBatch({
3776
3970
  gen: gen,
3777
3971
  fileName: fileName,
@@ -3789,9 +3983,9 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref35) {
3789
3983
  * @memberof visStateUpdaters
3790
3984
  * @public
3791
3985
  */
3792
- export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
3793
- var error = _ref37.error,
3794
- fileName = _ref37.fileName;
3986
+ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref40) {
3987
+ var error = _ref40.error,
3988
+ fileName = _ref40.fileName;
3795
3989
  // update ui with error message
3796
3990
  Console.warn(error);
3797
3991
  if (!state.fileLoading) {
@@ -3819,8 +4013,8 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref37) {
3819
4013
  * @memberof visStateUpdaters
3820
4014
  * @public
3821
4015
  */
3822
- export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref38) {
3823
- var dataId = _ref38.dataId;
4016
+ export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref41) {
4017
+ var dataId = _ref41.dataId;
3824
4018
  // apply cpuFilter
3825
4019
  var dataIds = toArray(dataId);
3826
4020
  return dataIds.reduce(function (accu, id) {
@@ -3879,9 +4073,9 @@ export function initialFileLoadingProgress(file, index) {
3879
4073
  error: null
3880
4074
  });
3881
4075
  }
3882
- export function updateFileLoadingProgressUpdater(state, _ref40) {
3883
- var fileName = _ref40.fileName,
3884
- progress = _ref40.progress;
4076
+ export function updateFileLoadingProgressUpdater(state, _ref43) {
4077
+ var fileName = _ref43.fileName,
4078
+ progress = _ref43.progress;
3885
4079
  // @ts-expect-error
3886
4080
  return pick_('fileLoadingProgress')(pick_(fileName)(merge_(progress)))(state);
3887
4081
  }
@@ -3973,8 +4167,8 @@ export function updateAnimationDomain(state) {
3973
4167
  * Update the status of the editor
3974
4168
  * @memberof visStateUpdaters
3975
4169
  */
3976
- export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
3977
- var mode = _ref41.mode;
4170
+ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref44) {
4171
+ var mode = _ref44.mode;
3978
4172
  var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
3979
4173
  if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
3980
4174
  return state;
@@ -3992,10 +4186,10 @@ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref41) {
3992
4186
  * Update editor features
3993
4187
  * @memberof visStateUpdaters
3994
4188
  */
3995
- export function setFeaturesUpdater(state, _ref42) {
4189
+ export function setFeaturesUpdater(state, _ref45) {
3996
4190
  var _lastFeature$properti, _lastFeature$properti2;
3997
- var _ref42$features = _ref42.features,
3998
- features = _ref42$features === void 0 ? [] : _ref42$features;
4191
+ var _ref45$features = _ref45.features,
4192
+ features = _ref45$features === void 0 ? [] : _ref45$features;
3999
4193
  var lastFeature = features.length && features[features.length - 1];
4000
4194
  var newState = _objectSpread(_objectSpread({}, state), {}, {
4001
4195
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -4068,10 +4262,10 @@ function findEditorFeature(state, feature) {
4068
4262
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
4069
4263
  * @memberof visStateUpdaters
4070
4264
  */
4071
- export function setEditorFeaturePropertiesUpdater(state, _ref43) {
4265
+ export function setEditorFeaturePropertiesUpdater(state, _ref46) {
4072
4266
  var _state$editor$selecte2;
4073
- var feature = _ref43.feature,
4074
- properties = _ref43.properties;
4267
+ var feature = _ref46.feature,
4268
+ properties = _ref46.properties;
4075
4269
  if (!getApplicationConfig().enableDrawOnMapSketches) {
4076
4270
  return state;
4077
4271
  }
@@ -4110,9 +4304,9 @@ export function setEditorFeaturePropertiesUpdater(state, _ref43) {
4110
4304
  * Set the current selected feature
4111
4305
  * @memberof uiStateUpdaters
4112
4306
  */
4113
- export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref44) {
4114
- var feature = _ref44.feature,
4115
- selectionContext = _ref44.selectionContext;
4307
+ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref47) {
4308
+ var feature = _ref47.feature,
4309
+ selectionContext = _ref47.selectionContext;
4116
4310
  // add bbox for polygon filter to speed up filtering
4117
4311
  var selectedFeature = feature;
4118
4312
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -4134,8 +4328,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
4134
4328
  * Delete existing feature from filters
4135
4329
  * @memberof visStateUpdaters
4136
4330
  */
4137
- export function deleteFeatureUpdater(state, _ref45) {
4138
- var feature = _ref45.feature;
4331
+ export function deleteFeatureUpdater(state, _ref48) {
4332
+ var feature = _ref48.feature;
4139
4333
  if (!feature) {
4140
4334
  return state;
4141
4335
  }
@@ -4280,10 +4474,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
4280
4474
  * @memberof visStateUpdaters
4281
4475
  * @public
4282
4476
  */
4283
- export function sortTableColumnUpdater(state, _ref46) {
4284
- var dataId = _ref46.dataId,
4285
- column = _ref46.column,
4286
- mode = _ref46.mode;
4477
+ export function sortTableColumnUpdater(state, _ref49) {
4478
+ var dataId = _ref49.dataId,
4479
+ column = _ref49.column,
4480
+ mode = _ref49.mode;
4287
4481
  var dataset = state.datasets[dataId];
4288
4482
  if (!dataset) {
4289
4483
  return state;
@@ -4304,9 +4498,9 @@ export function sortTableColumnUpdater(state, _ref46) {
4304
4498
  * @memberof visStateUpdaters
4305
4499
  * @public
4306
4500
  */
4307
- export function pinTableColumnUpdater(state, _ref47) {
4308
- var dataId = _ref47.dataId,
4309
- column = _ref47.column;
4501
+ export function pinTableColumnUpdater(state, _ref50) {
4502
+ var dataId = _ref50.dataId,
4503
+ column = _ref50.column;
4310
4504
  var dataset = state.datasets[dataId];
4311
4505
  if (!dataset) {
4312
4506
  return state;
@@ -4320,9 +4514,9 @@ export function pinTableColumnUpdater(state, _ref47) {
4320
4514
  * @memberof visStateUpdaters
4321
4515
  * @public
4322
4516
  */
4323
- export function copyTableColumnUpdater(state, _ref48) {
4324
- var dataId = _ref48.dataId,
4325
- column = _ref48.column;
4517
+ export function copyTableColumnUpdater(state, _ref51) {
4518
+ var dataId = _ref51.dataId,
4519
+ column = _ref51.column;
4326
4520
  var dataset = state.datasets[dataId];
4327
4521
  if (!dataset) {
4328
4522
  return state;
@@ -4346,9 +4540,9 @@ export function copyTableColumnUpdater(state, _ref48) {
4346
4540
  * @memberof visStateUpdaters
4347
4541
  * @public
4348
4542
  */
4349
- export function setColumnDisplayFormatUpdater(state, _ref49) {
4350
- var dataId = _ref49.dataId,
4351
- formats = _ref49.formats;
4543
+ export function setColumnDisplayFormatUpdater(state, _ref52) {
4544
+ var dataId = _ref52.dataId,
4545
+ formats = _ref52.formats;
4352
4546
  var dataset = state.datasets[dataId];
4353
4547
  if (!dataset) {
4354
4548
  return state;
@@ -4399,12 +4593,12 @@ function requestDatasetColumnStatistics(_x4) {
4399
4593
  return _requestDatasetColumnStatistics.apply(this, arguments);
4400
4594
  }
4401
4595
  function _requestDatasetColumnStatistics() {
4402
- _requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref50) {
4596
+ _requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref53) {
4403
4597
  var dataset, field, filterProps, mappedValue, values, result;
4404
4598
  return _regeneratorRuntime.wrap(function _callee4$(_context4) {
4405
4599
  while (1) switch (_context4.prev = _context4.next) {
4406
4600
  case 0:
4407
- dataset = _ref50.dataset, field = _ref50.field;
4601
+ dataset = _ref53.dataset, field = _ref53.field;
4408
4602
  _context4.next = 3;
4409
4603
  return yieldForPaint();
4410
4604
  case 3:
@@ -4437,9 +4631,9 @@ var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'L
4437
4631
  * @memberof visStateUpdaters
4438
4632
  * @public
4439
4633
  */
4440
- export function loadColumnStatsUpdater(state, _ref51) {
4441
- var dataId = _ref51.dataId,
4442
- fieldName = _ref51.fieldName;
4634
+ export function loadColumnStatsUpdater(state, _ref54) {
4635
+ var dataId = _ref54.dataId,
4636
+ fieldName = _ref54.fieldName;
4443
4637
  var fieldNamesToLoad = toArray(fieldName);
4444
4638
  var dataset = state.datasets[dataId];
4445
4639
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -4460,9 +4654,9 @@ export function loadColumnStatsUpdater(state, _ref51) {
4460
4654
  return LOAD_COLUMN_STATS_TASK({
4461
4655
  dataset: newDataset,
4462
4656
  field: f
4463
- }).bimap(function (_ref52) {
4464
- var result = _ref52.result,
4465
- filterProps = _ref52.filterProps;
4657
+ }).bimap(function (_ref55) {
4658
+ var result = _ref55.result,
4659
+ filterProps = _ref55.filterProps;
4466
4660
  return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps);
4467
4661
  }, function (error) {
4468
4662
  return loadColumnStatsError(newDataset.id, f.name, error);
@@ -4477,11 +4671,11 @@ export function loadColumnStatsUpdater(state, _ref51) {
4477
4671
  * @memberof visStateUpdaters
4478
4672
  * @public
4479
4673
  */
4480
- export function loadColumnStatsSuccessUpdater(state, _ref53) {
4481
- var result = _ref53.result,
4482
- filterProps = _ref53.filterProps,
4483
- dataId = _ref53.dataId,
4484
- fieldName = _ref53.fieldName;
4674
+ export function loadColumnStatsSuccessUpdater(state, _ref56) {
4675
+ var result = _ref56.result,
4676
+ filterProps = _ref56.filterProps,
4677
+ dataId = _ref56.dataId,
4678
+ fieldName = _ref56.fieldName;
4485
4679
  var dataset = state.datasets[dataId];
4486
4680
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
4487
4681
  return f.name === fieldName;
@@ -4509,10 +4703,10 @@ export function loadColumnStatsSuccessUpdater(state, _ref53) {
4509
4703
  * @memberof visStateUpdaters
4510
4704
  * @public
4511
4705
  */
4512
- export function loadColumnStatsErrorUpdater(state, _ref54) {
4513
- var error = _ref54.error,
4514
- dataId = _ref54.dataId,
4515
- fieldName = _ref54.fieldName;
4706
+ export function loadColumnStatsErrorUpdater(state, _ref57) {
4707
+ var error = _ref57.error,
4708
+ dataId = _ref57.dataId,
4709
+ fieldName = _ref57.fieldName;
4516
4710
  Console.error(error);
4517
4711
  var dataset = state.datasets[dataId];
4518
4712
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
@@ -4593,9 +4787,95 @@ _action) {
4593
4787
  }
4594
4788
  });
4595
4789
  }
4596
- export function setFilterAnimationTimeConfigUpdater(state, _ref55) {
4597
- var idx = _ref55.idx,
4598
- config = _ref55.config;
4790
+
4791
+ /**
4792
+ * Copy in-memory rows (or loaded vector-tile features) inside the selected
4793
+ * Draw on Map polygon into a new dataset.
4794
+ */
4795
+ export function extractDataFromFeatureUpdater(state, _ref58) {
4796
+ var layerId = _ref58.layerId;
4797
+ var feature = state.editor.selectedFeature;
4798
+ var layer = state.layers.find(function (l) {
4799
+ return l.id === layerId;
4800
+ });
4801
+ var dataId = layer === null || layer === void 0 ? void 0 : layer.config.dataId;
4802
+ var dataset = dataId ? state.datasets[dataId] : null;
4803
+ if (!layer || !dataset || !dataId) {
4804
+ return state;
4805
+ }
4806
+
4807
+ // GPU range/time filters are not reflected in filteredIndex; evaluate them on CPU
4808
+ // the same way export data does, then clip the result to the drawing.
4809
+ if (!isVectorTileExtractLayer(layer)) {
4810
+ state = filterDatasetCPU(state, dataId);
4811
+ dataset = state.datasets[dataId];
4812
+ if (!dataset) {
4813
+ return state;
4814
+ }
4815
+ }
4816
+ var extracted;
4817
+ try {
4818
+ extracted = extractRowsInsideFeature({
4819
+ layer: layer,
4820
+ dataset: dataset,
4821
+ feature: feature
4822
+ });
4823
+ } catch (err) {
4824
+ var message = err instanceof Error ? err.message : String(err);
4825
+ return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4826
+ return addNotification(errorNotification({
4827
+ message: "Failed to extract data: ".concat(message),
4828
+ id: 'extract-data-from-feature'
4829
+ }));
4830
+ }));
4831
+ }
4832
+ if (!extracted) {
4833
+ return state;
4834
+ }
4835
+ if (!extracted.rowCount) {
4836
+ return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4837
+ return addNotification(errorNotification({
4838
+ message: isVectorTileExtractLayer(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
4839
+ id: 'extract-data-from-feature-empty'
4840
+ }));
4841
+ }));
4842
+ }
4843
+ var data;
4844
+ try {
4845
+ data = extracted.kind === 'geojson' ? processGeojson({
4846
+ type: 'FeatureCollection',
4847
+ features: extracted.features
4848
+ }) : {
4849
+ fields: extracted.fields,
4850
+ rows: extracted.rows
4851
+ };
4852
+ } catch (err) {
4853
+ var _message = err instanceof Error ? err.message : String(err);
4854
+ return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4855
+ return addNotification(errorNotification({
4856
+ message: "Failed to extract data: ".concat(_message),
4857
+ id: 'extract-data-from-feature'
4858
+ }));
4859
+ }));
4860
+ }
4861
+ return updateVisDataUpdater(state, {
4862
+ datasets: {
4863
+ info: {
4864
+ id: "extract-".concat(generateHashId(6)),
4865
+ label: "Extracted ".concat(dataset.label)
4866
+ },
4867
+ data: data
4868
+ },
4869
+ options: {
4870
+ keepExistingConfig: true,
4871
+ centerMap: false,
4872
+ autoCreateLayers: true
4873
+ }
4874
+ });
4875
+ }
4876
+ export function setFilterAnimationTimeConfigUpdater(state, _ref59) {
4877
+ var idx = _ref59.idx,
4878
+ config = _ref59.config;
4599
4879
  var oldFilter = state.filters[idx];
4600
4880
  if (!oldFilter) {
4601
4881
  Console.error("filters.".concat(idx, " is undefined"));
@@ -4625,8 +4905,8 @@ function checkTimeConfigArgs(config) {
4625
4905
  /**
4626
4906
  * Update editor
4627
4907
  */
4628
- export function setLayerAnimationTimeConfigUpdater(state, _ref56) {
4629
- var config = _ref56.config;
4908
+ export function setLayerAnimationTimeConfigUpdater(state, _ref60) {
4909
+ var config = _ref60.config;
4630
4910
  if (!config) {
4631
4911
  return state;
4632
4912
  }
@@ -4824,8 +5104,8 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
4824
5104
  * @returns nextState
4825
5105
  * @public
4826
5106
  */
4827
- export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref57) {
4828
- var change = _ref57.payload.change;
5107
+ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref61) {
5108
+ var change = _ref61.payload.change;
4829
5109
  var loadingIndicatorValue = state.loadingIndicatorValue;
4830
5110
  if (!loadingIndicatorValue) {
4831
5111
  loadingIndicatorValue = 0;
@@ -4872,8 +5152,8 @@ function adjustTimeFilterInterval(state, filter) {
4872
5152
  }
4873
5153
  }, TIME_INTERVALS_ORDERED.length - 1);
4874
5154
  // @ts-ignore
4875
- var hexTileInterval = TIME_INTERVALS_ORDERED[intervalIndex];
4876
- interval = LayerToFilterTimeInterval[hexTileInterval];
5155
+ var layerTimeInterval = TIME_INTERVALS_ORDERED[intervalIndex];
5156
+ interval = LayerToFilterTimeInterval[layerTimeInterval];
4877
5157
  }
4878
5158
  if (!interval) {
4879
5159
  return filter;
@@ -4894,6 +5174,9 @@ function adjustTimeFilterInterval(state, filter) {
4894
5174
  // replace it with another dataId
4895
5175
  function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
4896
5176
  var _value$config, _value$config2;
5177
+ if (value == null) {
5178
+ return null;
5179
+ }
4897
5180
  if (Array.isArray(value)) {
4898
5181
  // for layers, filters, call defaultReplaceParentDatasetIds on each item in array
4899
5182
  var replaced = value.map(function (v) {
@@ -4945,10 +5228,10 @@ function findChildDatasetIds(value) {
4945
5228
  }
4946
5229
 
4947
5230
  // moved unmerged layers, filters, interactions
4948
- function moveValueToBeMerged(state, propValues, _ref59) {
4949
- var prop = _ref59.prop,
4950
- toMergeProp = _ref59.toMergeProp,
4951
- saveUnmerged = _ref59.saveUnmerged;
5231
+ function moveValueToBeMerged(state, propValues, _ref63) {
5232
+ var prop = _ref63.prop,
5233
+ toMergeProp = _ref63.toMergeProp,
5234
+ saveUnmerged = _ref63.saveUnmerged;
4952
5235
  // remove prop value from state
4953
5236
  // TODO: should we add remove updater to merger as well?
4954
5237
  if (!propValues) {
@@ -4999,23 +5282,58 @@ export function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
4999
5282
  // preserveLayerOrder
5000
5283
  if ((_nextState$layerToBeM = nextState.layerToBeMerged) !== null && _nextState$layerToBeM !== void 0 && _nextState$layerToBeM.length) {
5001
5284
  var _serializedState$spli;
5002
- // copy split maps to be merged, because it will be reset in remove layer
5003
- nextState.splitMapsToBeMerged = (_serializedState$spli = serializedState === null || serializedState === void 0 ? void 0 : serializedState.splitMaps) !== null && _serializedState$spli !== void 0 ? _serializedState$spli : [];
5285
+ // copy split maps to be merged, because it will be reset in remove layer.
5286
+ // Keep the ones of a dataset replaced a moment earlier and not merged back yet:
5287
+ // its layers are no longer in the current split maps.
5288
+ nextState.splitMapsToBeMerged = combineSplitMapsByIndex(state.splitMapsToBeMerged, (_serializedState$spli = serializedState === null || serializedState === void 0 ? void 0 : serializedState.splitMaps) !== null && _serializedState$spli !== void 0 ? _serializedState$spli : []);
5004
5289
  nextState.layerOrder = _toConsumableArray(preserveLayerOrder);
5005
5290
  }
5006
5291
  return nextState;
5007
5292
  }
5008
- export function replaceDatasetDepsInState(state, _ref60) {
5009
- var dataId = _ref60.dataId,
5010
- dataIdToUse = _ref60.dataIdToUse;
5293
+
5294
+ /**
5295
+ * The order to preserve for the items that will be merged back.
5296
+ *
5297
+ * `ids` comes from the serialized state, so it lists everything but the items
5298
+ * another dataset's replacement parked a moment ago: an app refreshing several
5299
+ * datasets in a row prepares the second replacement before the first one's
5300
+ * items have merged back. Writing `ids` as it is would drop those, and
5301
+ * `insertItemBasedOnPreservedOrder` puts an item it cannot place at the front —
5302
+ * so they would come back reversed. Where they belong is what the order written
5303
+ * when they were parked already says, so that order is kept for them.
5304
+ */
5305
+ export function preservedOrderWithParked() {
5306
+ var previousOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
5307
+ var ids = arguments.length > 1 ? arguments[1] : undefined;
5308
+ var parked = arguments.length > 2 ? arguments[2] : undefined;
5309
+ var parkedIds = parked.map(function (item) {
5310
+ return item === null || item === void 0 ? void 0 : item.id;
5311
+ }).filter(function (id) {
5312
+ return Boolean(id) && !ids.includes(id);
5313
+ });
5314
+ if (!parkedIds.length) {
5315
+ return ids;
5316
+ }
5317
+ var known = new Set([].concat(_toConsumableArray(ids), _toConsumableArray(parkedIds)));
5318
+ var ordered = (previousOrder || []).filter(function (id) {
5319
+ return known.has(id);
5320
+ });
5321
+ var rest = [].concat(_toConsumableArray(ids), _toConsumableArray(parkedIds)).filter(function (id) {
5322
+ return !ordered.includes(id);
5323
+ });
5324
+ return [].concat(_toConsumableArray(ordered), _toConsumableArray(rest));
5325
+ }
5326
+ export function replaceDatasetDepsInState(state, _ref64) {
5327
+ var dataId = _ref64.dataId,
5328
+ dataIdToUse = _ref64.dataIdToUse;
5011
5329
  var serializedState = serializeVisState(state, state.schema);
5012
- var nextState = state.mergers.reduce(function (accuState, _ref61) {
5013
- var prop = _ref61.prop,
5014
- toMergeProp = _ref61.toMergeProp,
5015
- replaceParentDatasetIds = _ref61.replaceParentDatasetIds,
5016
- getChildDatasetIds = _ref61.getChildDatasetIds,
5017
- saveUnmerged = _ref61.saveUnmerged,
5018
- preserveOrder = _ref61.preserveOrder;
5330
+ var nextState = state.mergers.reduce(function (accuState, _ref65) {
5331
+ var prop = _ref65.prop,
5332
+ toMergeProp = _ref65.toMergeProp,
5333
+ replaceParentDatasetIds = _ref65.replaceParentDatasetIds,
5334
+ getChildDatasetIds = _ref65.getChildDatasetIds,
5335
+ saveUnmerged = _ref65.saveUnmerged,
5336
+ preserveOrder = _ref65.preserveOrder;
5019
5337
  // get dataset ids that are depends on this dataset
5020
5338
  var props = toArray(prop);
5021
5339
  var toMergeProps = toArray(toMergeProp);
@@ -5024,13 +5342,20 @@ export function replaceDatasetDepsInState(state, _ref60) {
5024
5342
  }) : [];
5025
5343
  var replacedState = accuState;
5026
5344
  savedProps.forEach(function (propValue, i) {
5027
- var _replacedState$merger;
5345
+ var _replacedState$merger, _replacedState$merger2;
5346
+ if (propValue == null) {
5347
+ return;
5348
+ }
5028
5349
  var mergerOptions = {
5029
5350
  prop: props[i],
5030
5351
  toMergeProp: toMergeProps[i],
5031
5352
  getChildDatasetIds: getChildDatasetIds,
5032
5353
  saveUnmerged: saveUnmerged
5033
5354
  };
5355
+
5356
+ // What another dataset's replacement parked a moment ago and has not
5357
+ // merged back yet, read before this one parks anything of its own.
5358
+ var parkedElsewhere = mergerOptions.toMergeProp !== undefined ? toArray((_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 ? _replacedState$merger : []) : [];
5034
5359
  var replacedItem = (replaceParentDatasetIds === null || replaceParentDatasetIds === void 0 ? void 0 : replaceParentDatasetIds(propValue, dataId, dataIdToUse)) || defaultReplaceParentDatasetIds(propValue, dataId, dataIdToUse);
5035
5360
  replacedState = replacedItem ? replacePropValueInState(replacedState, replacedItem, mergerOptions) : replacedState;
5036
5361
 
@@ -5038,21 +5363,21 @@ export function replaceDatasetDepsInState(state, _ref60) {
5038
5363
  // can still hold another dataset's items, replaced a moment earlier and
5039
5364
  // not merged back yet; overwriting the order they were parked with would
5040
5365
  // merge them back in reverse.
5041
- if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger !== void 0 && _replacedState$merger.length && preserveOrder) {
5042
- replacedState[preserveOrder] = propValue.map(function (item) {
5366
+ if (replacedItem && mergerOptions.toMergeProp !== undefined && (_replacedState$merger2 = replacedState[mergerOptions.toMergeProp]) !== null && _replacedState$merger2 !== void 0 && _replacedState$merger2.length && preserveOrder) {
5367
+ replacedState[preserveOrder] = preservedOrderWithParked(replacedState[preserveOrder], propValue.map(function (item) {
5043
5368
  return item.id;
5044
- });
5369
+ }), parkedElsewhere);
5045
5370
  }
5046
5371
  });
5047
5372
  return replacedState;
5048
5373
  }, state);
5049
5374
  return nextState;
5050
5375
  }
5051
- function replacePropValueInState(state, replacedItem, _ref62) {
5052
- var prop = _ref62.prop,
5053
- toMergeProp = _ref62.toMergeProp,
5054
- getChildDatasetIds = _ref62.getChildDatasetIds,
5055
- saveUnmerged = _ref62.saveUnmerged;
5376
+ function replacePropValueInState(state, replacedItem, _ref66) {
5377
+ var prop = _ref66.prop,
5378
+ toMergeProp = _ref66.toMergeProp,
5379
+ getChildDatasetIds = _ref66.getChildDatasetIds,
5380
+ saveUnmerged = _ref66.saveUnmerged;
5056
5381
  // prop is depends on the dataset to be replaced
5057
5382
  // remove prop from state, and move it to toBeMerged
5058
5383
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -5070,4 +5395,4 @@ function replacePropValueInState(state, replacedItem, _ref62) {
5070
5395
  }
5071
5396
  return nextState;
5072
5397
  }
5073
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZXJyb3JOb3RpZmljYXRpb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsInRvU2tldGNoRmVhdHVyZSIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmlsdGVyRGF0YXNldENQVSIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsImdldERlZmF1bHRGaWx0ZXIiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImlzSW5SYW5nZSIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzUmdiQ29sb3IiLCJwYXJzZUZpZWxkVmFsdWUiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJzZXQiLCJ1cGRhdGVGaWx0ZXJQbG90IiwicmVtb3ZlRmlsdGVyUGxvdCIsImlzTGF5ZXJBbmltYXRhYmxlIiwiaXNTaWRlRmlsdGVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImdlbmVyYXRlSGFzaElkIiwidG9BcnJheSIsImFycmF5TW92ZSIsIkFOSU1BVElPTl9XSU5ET1ciLCJCQVNFX1NQRUVEIiwiQ09NUEFSRV9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkVESVRPUl9NT0RFUyIsIkZJTFRFUl9UWVBFUyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiTEFZRVJfVFlQRVMiLCJGUFMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwiUExPVF9UWVBFUyIsIlNPUlRfT1JERVIiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiQ0hBTk5FTF9TQ0FMRVMiLCJTQ0FMRV9UWVBFUyIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJBbm5vdGF0aW9uS2luZCIsIkRhdGFzZXRUeXBlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiTEFZRVJfSURfTEVOR1RIIiwiTGF5ZXIiLCJMYXllckNsYXNzZXMiLCJhcHBseV8iLCJjb21wb3NlXyIsImZpbHRlck91dEJ5SWQiLCJtZXJnZV8iLCJwYXlsb2FkXyIsInBpY2tfIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJzd2FwXyIsImlzVmFsaWRNZXJnZXIiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlTGF5ZXJDb25maWciLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZVZpc1N0YXRlIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiS2VwbGVyR0xTY2hlbWEiLCJsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQiLCJwcm9jZXNzR2VvanNvbiIsImFzc2lnbkdwdUNoYW5uZWwiLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJwaW5UYWJsZUNvbHVtbnMiLCJzZXRGaWx0ZXJHcHVNb2RlIiwic29ydERhdGFzZXRCeUNvbHVtbiIsImZpbmRGaWVsZHNUb1Nob3ciLCJjYWxjdWxhdGVMYXllckRhdGEiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJnZXROZXdMYXllckdyb3VwIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJmaXhFZmZlY3RPcmRlciIsImdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsIm1lcmdlVGltZURvbWFpbnMiLCJhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93IiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsIm1lcmdlRmlsdGVyRG9tYWluIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJjcmVhdGVFZmZlY3QiLCJmaW5kTWFwQm91bmRzIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsInNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJmcm9tQ2FsbGJhY2siLCJfIiwiY2IiLCJBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OIiwidXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhIiwic3RhdGUiLCJfcmVmIiwibGF5ZXIiLCJpZHgiLCJfb2JqZWN0U3ByZWFkIiwibWFwIiwibHlyIiwiaSIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJpc1Zpc2libGUiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsIm5leHQiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyIsImFwcGx5TGF5ZXJDb25maWdVcGRhdGVyIiwiYWN0aW9uIiwiX3NlcmlhbGl6ZUxheWVyIiwib2xkTGF5ZXJJZCIsIm5ld0xheWVyQ29uZmlnIiwibGF5ZXJJbmRleCIsIm5ld1BhcnNlZExheWVyIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm5ld0xheWVySWQiLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwidmlzdWFsQ2hhbm5lbHMiLCJjaGFubmVsTmFtZSIsImNoYW5uZWwiLCJjaGFubmVsUHJvcE5hbWVzIiwicHJvcCIsInNvbWUiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZXJyIiwiZSIsImYiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ1cGRhdGVsYXllclZpc2liaWx0eSIsImZpbHRlckluZGV4IiwiZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2RlZmluZVByb3BlcnR5IiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJhcmd1bWVudHMiLCJuZXdUZXh0TGFiZWwiLCJzbGljZSIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwibmFtZSIsImZpbHRlciIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIkFycmF5IiwiaXNBcnJheSIsIm5ld1R5cGUiLCJvbGRJZCIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIl90b1Byb3BlcnR5S2V5IiwicmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0IiwidmlzdWFsQ2hhbm5lbCIsImluY29taW5nIiwiX3R5cGVvZiIsImZvdW5kIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJjaGFubmVsU2NhbGVUeXBlIiwiY29sb3IiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJyYW5nZSIsImNvbG9yUmFuZ2VDb25maWciLCJjb2xvclVJIiwiY3VzdG9tQnJlYWtzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTUiLCJzY2FsZSIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwibmV3U3luY1RpbWVsaW5lTW9kZSIsImdldFN5bmNBbmltYXRpb25Nb2RlIiwic2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIiLCJhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIiLCJfc2VyaWFsaXplRmlsdGVyIiwiZmlsdGVySWQiLCJvbGRGaWx0ZXIiLCJzZXJpYWxpemVkT2xkRmlsdGVyIiwic2VyaWFsaXplZE5ld0ZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsInRpbWVSYW5nZSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiZGF0YXNldElkcyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJlbmROYW1lIiwiX2FwcGx5VGltZUZpbHRlckVuZEZpIiwiZ3B1Q2hhbm5lbCIsImdwdUVuZENoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY2IiwibmV3UHJvcCIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY3Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsIk51bWJlciIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwibmV3TGF5ZXJPcmRlciIsInJlbW92ZUxheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cFRvUmVtb3ZlIiwibGF5ZXJJZHNUb1JlbW92ZSIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsImFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBJZCIsImVudHJ5IiwibmV3R3JvdXBMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIiLCJuZXdMYXllckdyb3VwT3JkZXIiLCJzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsIm9yaWdpbkxheWVyR3JvdXBJZCIsImRlc3RpbmF0aW9uTGF5ZXJHcm91cElkIiwib3JpZ2luSW5kZXgiLCJkZXN0aW5hdGlvbkluZGV4IiwiZGVzdEluZGV4IiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwiX3JlZjEiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsInBhcmVudEdyb3VwIiwibGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQiLCJpZHhJbkdyb3VwIiwidXBkYXRlZEdyb3VwIiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiX2FjdGlvbiRjb25maWcyIiwiX2FjdGlvbiRjb25maWczIiwiZWZmZWN0IiwibmV3RWZmZWN0Iiwic2V0UHJvcHMiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV4dFBhcmFtcyIsInBhcmFtZXRlcnMiLCJ0aW1lc3RhbXAiLCJuZXdFZmZlY3RzIiwibWFrZU5ld0Fubm90YXRpb24iLCJfY29uZmlnJGtpbmQiLCJfcmVmMTMiLCJfY29uZmlnJHRleHRTaWRlIiwiX3JlZjE0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxQIiwiX2NvbmZpZyRpZCIsIl9jb25maWckaXNWaXNpYmxlIiwiX2NvbmZpZyRhdXRvU2l6ZSIsIl9jb25maWckYXV0b1NpemVZIiwiX2NvbmZpZyRhbmNob3JQb2ludCIsIl9jb25maWckbGFiZWwiLCJfY29uZmlnJGxpbmVDb2xvciIsIl9jb25maWckbGluZVdpZHRoIiwiX2NvbmZpZyR0ZXh0V2lkdGgiLCJfY29uZmlnJHRleHRIZWlnaHQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbEEiLCJfYXJtTGVuZ3RoIiwiX2FybUxlbmd0aDIiLCJfYXJtTGVuZ3RoMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJwcm92aWRlZEFuZ2xlIiwiYW5nbGUiLCJkZXJpdmVkRnJvbUFuZ2xlIiwidGV4dFNpZGUiLCJURVhUIiwidGV4dFZlcnRpY2FsUG9zaXRpb24iLCJ2ZXJ0aWNhbCIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiYWRkQW5ub3RhdGlvblVwZGF0ZXIiLCJuZXdBbm5vdGF0aW9uIiwicmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTUiLCJhIiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTYiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTciLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInB1c2giLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjE5IiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjAiLCJfcmVmMjAkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjAkcGF5bG9hZCRjb25maWciLCJfcmVmMjAkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsIm1lcmdlIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyMSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjIyIiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkVYVEVSTkFMTFlfSE9TVEVEIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl94IiwiX2h5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiYXBwbHkiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZTIiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJfcmVmMjMiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjQiLCJvblByb2dyZXNzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiYXJnIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyNSIsIl9kYXRhc2V0JG1ldGFkYXRhMiIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudCIsIk1hdGgiLCJyb3VuZCIsInBlcmNlbnQiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjI2IiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJjdXJyZW50IiwiZXZlcnkiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMjciLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYyOCIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjI5Iiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjMwIiwiU3RyaW5nIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYzMSIsImRhdGFzZXRJbmRleCIsIl9yZWYzMSRpbmZvIiwicmVzdCIsIl9leGNsdWRlZDIiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsImNoYW5nZSIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwicmVhc29uIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJsYXllclZpc0NvbmZpZyIsInBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEiLCJfbGF5ZXIkY29uZmlnIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsImJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsImV4aXN0aW5nIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzIiLCJfcmVmMzMiLCJja2V5IiwiY29sIiwiX3JlZjM0IiwiZmllbGRDb25maWciLCJsYXllckNvcHkiLCJhc3NpZ24iLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImhhc0FsbENvbHVtbnMiLCJ1cGRhdGVEYXRhc2V0VXBkYXRlciIsIl9pbnRlcmFjdGlvbkNvbmZpZzIiLCJfdG9vbHRpcCRjb25maWciLCJfYWN0aW9uJHJlbmFtZXMiLCJ1cGRhdGVTY2hlbWEiLCJmaWx0ZXJlZElkeENQVSIsImFsbEluZGV4ZXMiLCJmaWx0ZXJSZWNvcmRDUFUiLCJzb3J0Q29sdW1uIiwic29ydE9yZGVyIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5ld0ZpZWxkc0J5TmFtZSIsIlNldCIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJmaWVsZElkeCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwiaGFzIiwiZmlsdGVyVGFibGUiLCJyZWNvbmNpbGVkIiwibmV4dEZpZWxkc1RvU2hvdyIsImZsYXRNYXAiLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJmcm9tIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiZ2VuIiwiY29udGVudCIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM1IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzUkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsInNraXBBcnJvd0NvbXBhY3QiLCJfcmVmMzYiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjM3IiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYzOCIsImRhdGFJZHMiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwibWVyZ2VkIiwiX3JlZjQwIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY0MSIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY0MiIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNDIkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQzIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDQiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDUiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDYiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjQ3IiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY0OCIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwidmFsdWVBdCIsImpvaW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY0OSIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94NCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlNCIsIl9yZWY1MCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTEiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1MiIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjUzIiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1NCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNTUiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU2IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY1NyIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiaGV4VGlsZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY1OSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsIl9yZWY2MCIsImFjY3VTdGF0ZSIsIl9yZWY2MSIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyIiwibWVyZ2VyT3B0aW9ucyIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjYyIiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04sXG4gIEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5ULFxuICB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsIHByb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBLZXBsZXJUYWJsZSxcbiAgRmlsdGVyUHJvcHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSxcbiAgY29sbGVjdENvbHVtblZhbHVlcyxcbiAgZ2V0Q29sdW1uU3RhdGlzdGljc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyBkaXNhYmxlIHN0YWNrIGNhcHR1cmUgZm9yIHdpdGhUYXNrIGNhbGxzIHRoYXQgaGFwcGVuIG91dHNpZGUgc3RyaWN0IHJlZHVjZXIgY29udGV4dFxuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID1cbiAgICAvLyB3aWxsIG1vdmUgdmlzdWFsQ2hhbm5lbHMgdG8gdGhlIGNvbmZpZyBwcm9wXG4gICAgcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmLFxuICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbihcbiAgICAgICAgdGV4dExhYmVsLmZpbmQodGwgPT4gdGwuY29sbGlzaW9uRW5hYmxlZCk/LmNvbGxpc2lvbkVuYWJsZWQgPz9cbiAgICAgICAgICBkZWZhdWx0VGV4dExhYmVsLmNvbGxpc2lvbkVuYWJsZWRcbiAgICAgIClcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICB7XG4gICAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4odGV4dExhYmVsWzBdPy5jb2xsaXNpb25FbmFibGVkKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIGlmIChpZHggPT09ICdhbGwnICYmIHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKHRsID0+ICh7Li4udGwsIFtwcm9wXTogdmFsdWV9KSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBvbGRMYXllci5pZCwgbmV3TGF5ZXIuaWQpXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFtcbiAgICAnZGF0YUlkJyxcbiAgICAnbmFtZScsXG4gICAgJ2ZpZWxkSWR4JyxcbiAgICAnZ3B1Q2hhbm5lbCcsXG4gICAgJ2VuZE5hbWUnLFxuICAgICdlbmRGaWVsZElkeCcsXG4gICAgJ2VuZE1hcHBlZFZhbHVlJyxcbiAgICAnZ3B1RW5kQ2hhbm5lbCdcbiAgXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/PyBJTklUSUFMX0FOTk9UQVRJT05fS0lORDtcbiAgY29uc3QgcHJvdmlkZWRBbmdsZSA9IE51bWJlci5pc0Zpbml0ZSgoY29uZmlnIGFzIGFueSk/LmFuZ2xlKSA/IChjb25maWcgYXMgYW55KS5hbmdsZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVyaXZlZEZyb21BbmdsZSA9XG4gICAgcHJvdmlkZWRBbmdsZSAhPSBudWxsID8gdGV4dFBsYWNlbWVudEZyb21BbmdsZShwcm92aWRlZEFuZ2xlKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dFNpZGUgPVxuICAgIGNvbmZpZz8udGV4dFNpZGUgPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy5zaWRlID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFKTtcbiAgY29uc3QgdGV4dFZlcnRpY2FsUG9zaXRpb24gPVxuICAgIGNvbmZpZz8udGV4dFZlcnRpY2FsUG9zaXRpb24gPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy52ZXJ0aWNhbCA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04pO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgLi4uKHRleHRTaWRlID8ge3RleHRTaWRlfSA6IHt9KSxcbiAgICAuLi4odGV4dFZlcnRpY2FsUG9zaXRpb24gPyB7dGV4dFZlcnRpY2FsUG9zaXRpb259IDoge30pLFxuICAgIG1hcEluZGV4OiBjb25maWc/Lm1hcEluZGV4XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEFuZ2xlID1cbiAgICB0ZXh0U2lkZSAmJiB0ZXh0VmVydGljYWxQb3NpdGlvblxuICAgICAgPyBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVFtgJHt0ZXh0U2lkZX0tJHt0ZXh0VmVydGljYWxQb3NpdGlvbn1gXVxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEU7XG5cbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5QT0lOVDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlBPSU5ULFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5BUlJPVzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkFSUk9XLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5DSVJDTEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5DSVJDTEUsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBkYXRhc2V0LCAuLi5uZXdEYXRhc2V0c31cbiAgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgbGV0IG5ld1N0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzXG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIG5ld1N0YXRlLmZpbHRlcnMpIHtcbiAgICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFzZXRLZXkpO1xuICAgIGlmICh2YWx1ZUluZGV4ID49IDAgJiYgZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBvbmx5IHJlbW92ZSBvbmUgc3luY2VkIGRhdGFzZXQgZnJvbSB0aGUgZmlsdGVyXG4gICAgICBmaWx0ZXJzLnB1c2goX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUluZGV4IDwgMCkge1xuICAgICAgLy8gbGVhdmUgdGhlIGZpbHRlciBhcyBpc1xuICAgICAgZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGZpbHRlcnN9O1xuXG4gIHJldHVybiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwXG4gIH0pO1xuICBpZiAoIWxvYWRlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhIGxvYWRlZCBmcm9tICR7ZGF0YXNldC5tZXRhZGF0YT8uc291cmNlfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YXNldCxcbiAgICBkYXRhOiBsb2FkZWQuZGF0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIGV0YWc6IGxvYWRlZC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBsb2FkZWQubGFzdE1vZGlmaWVkLFxuICAgICAgLi4uKHR5cGVvZiBsb2FkZWQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogbG9hZGVkLnNpemV9IDoge30pLFxuICAgICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJ1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soZGF0YXNldCkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgc2l6ZTogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgPT09ICdudW1iZXInID8gbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXRhZzogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgPT09ICdzdHJpbmcnID8gbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdE1vZGlmaWVkOlxuICAgICAgICAgIHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgICByZWZyZXNoRGF0YXNldFByb2dyZXNzKGRhdGFJZCwgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApKVxuICAgIH0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IHJlZnJlc2hEYXRhc2V0U3VjY2VzcyhkYXRhSWQsIHJlc3VsdCksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiByZWZyZXNoRGF0YXNldEVycm9yKGRhdGFJZCwgZXJyb3IpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IHJlZnJlc2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgIT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoUHJvZ3Jlc3MgPT09IG5leHRQZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtyZWZyZXNoUHJvZ3Jlc3M6IG5leHRQZXJjZW50fSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZXNFcXVhbChjdXJyZW50OiB7bmFtZTogc3RyaW5nfVtdLCBpbmNvbWluZz86IHtuYW1lOiBzdHJpbmd9W10gfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghaW5jb21pbmc/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gaW5jb21pbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjdXJyZW50LmV2ZXJ5KChmaWVsZCwgaSkgPT4gZmllbGQubmFtZSA9PT0gaW5jb21pbmdbaV0ubmFtZSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHJlbW90ZSBzbmFwc2hvdCBjaGFuZ2VzIGNvbHVtbiBuYW1lcywgb2xkIGxheWVyIGZpZWxkSWR4IC8gZmlsdGVyIG5hbWVzXG4gKiBjYW4gcG9pbnQgYXQgdGhlIHdyb25nIGNvbHVtbi4gUmUtYmluZCBieSBuYW1lIGFuZCBkcm9wIGNvbmZpZ3MgdGhhdCBubyBsb25nZXIgZml0LlxuICovXG5mdW5jdGlvbiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgbmV4dExheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkTGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChsYXllcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYm91bmQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMsIGxheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICAgIGlmIChyZWJvdW5kPy5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChyZWJvdW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZExheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZXh0TGF5ZXJPcmRlciA9IHN0YXRlLmxheWVyT3JkZXI7XG4gIGxldCBuZXh0U3BsaXRNYXBzID0gc3RhdGUuc3BsaXRNYXBzO1xuICBkcm9wcGVkTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIG5leHRMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5leHRMYXllck9yZGVyLCBsYXllci5pZCk7XG4gICAgbmV4dFNwbGl0TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhuZXh0U3BsaXRNYXBzLCBsYXllcik7XG4gIH0pO1xuXG4gIGNvbnN0IG5leHRMYXllckRhdGEgPSBuZXh0TGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgY29uc3Qgb2xkSWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChvbGRMYXllciA9PiBvbGRMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIHJldHVybiBvbGRJZHggPj0gMCA/IHN0YXRlLmxheWVyRGF0YVtvbGRJZHhdIDoge307XG4gIH0pO1xuXG4gIGNvbnN0IGZpbHRlcnNGb3JEYXRhc2V0ID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IG90aGVyRmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcblxuICBjb25zdCB7dmFsaWRhdGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoXG4gICAgey4uLnN0YXRlLCBkYXRhc2V0cywgbGF5ZXJzOiBuZXh0TGF5ZXJzfSxcbiAgICBmaWx0ZXJzRm9yRGF0YXNldFxuICApO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXJzID0gWy4uLm90aGVyRmlsdGVycywgLi4udmFsaWRhdGVkXTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIG5leHRGaWx0ZXJzLFxuICAgIG5leHRMYXllcnNcbiAgKTtcblxuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBsYXllcnM6IG5leHRMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXh0TGF5ZXJEYXRhLFxuICAgIGxheWVyT3JkZXI6IG5leHRMYXllck9yZGVyLFxuICAgIHNwbGl0TWFwczogbmV4dFNwbGl0TWFwcyxcbiAgICBmaWx0ZXJzOiBuZXh0RmlsdGVyc1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZmluaXNoZWQgcmVtb3RlIHJlZnJlc2g6IGtlZXAgbGF5ZXJzLCByZS1ydW4gZmlsdGVycyBhbmQgbGF5ZXIgZGF0YS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJlc3VsdH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YVBhdGNoID0ge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZCxcbiAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgIC8vIEFsd2F5cyB3cml0ZSB2YWxpZGF0b3JzLiBBIDIwMCB0aGF0IG9taXRzIHRoZW0gbXVzdCBub3Qga2VlcCB0aGUgcHJldmlvdXNcbiAgICAvLyBFVGFnIG9yIGEgbGF0ZXIgMzA0IGNhbiBza2lwIGEgYm9keSB3ZSBubyBsb25nZXIgaGF2ZS5cbiAgICBldGFnOiByZXN1bHQuZXRhZyxcbiAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgLi4uKHR5cGVvZiByZXN1bHQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogcmVzdWx0LnNpemV9IDoge30pXG4gIH07XG5cbiAgY29uc3Qgc2NoZW1hVW5jaGFuZ2VkID0gZmllbGROYW1lc0VxdWFsKGRhdGFzZXQuZmllbGRzLCByZXN1bHQuZGF0YT8uZmllbGRzKTtcblxuICAvLyBBcHBseSB0aGUgc25hcHNob3QgdG8gdGhlIHRhYmxlIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUuIFByb2dyZXNzIG1heSBoYXZlXG4gIC8vIGNvcGllZCBpdCBvZmYgdGhlIG9iamVjdCB0aGF0IHN0YXJ0ZWQgdGhlIGZldGNoOyB0aGUgdGFzayBuZXZlciBtdXRhdGVzIGl0LlxuICBpZiAoIXJlc3VsdC5ub3RNb2RpZmllZCAmJiByZXN1bHQuZGF0YSkge1xuICAgIC8vIEtlcGxlclRhYmxlLnVwZGF0ZSBpcyBhc3luYyBzbyBEdWNrREIgY2FuIGF3YWl0IEFycm93IGNvbnZlcnNpb24uIFRoZVxuICAgIC8vIENTVi9HZW9KU09OIHBhdGggKGFuZCBLZXBsZXJUYWJsZS5pbXBvcnREYXRhKSBydW4gc3luY2hyb25vdXNseSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgYXdhaXQsIHNvIHRoZSBzdG9yZSB0YWJsZSBpcyB1cGRhdGVkIGJlZm9yZSB3ZSBjb3B5IGl0IGJlbG93LlxuICAgIHZvaWQgZGF0YXNldC51cGRhdGUocmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaGVkID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwgbWV0YWRhdGFQYXRjaCk7XG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiByZWZyZXNoZWRcbiAgfTtcblxuICBpZiAocmVzdWx0Lm5vdE1vZGlmaWVkIHx8ICFyZXN1bHQuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzXG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2NoZW1hVW5jaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShzdGF0ZSwgZGF0YUlkLCBkYXRhc2V0cyk7XG4gIH1cblxuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbmZ1bmN0aW9uIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHN0YXRlOiBWaXNTdGF0ZSwgZGF0YUlkOiBzdHJpbmcpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YXNldFJvd0xpc3QoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXVxuKTogcm93cyBpcyBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8ICFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3MpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGNvbHVtbi1vcmRlcmVkIHJvdyBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzOyBhIGxpc3Qgb2Ygcm93cyBpc1xuICAvLyBhbiBhcnJheSBvZiBhcnJheXMgb3IgYW4gYXJyYXkgb2YgZmllbGQtbmFtZSByZWNvcmRzLlxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzWzBdKSB8fCBpc1BsYWluT2JqZWN0KHJvd3NbMF0pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5Um93KHJvdzogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3csIGZpZWxkczogRmllbGRbXSk6IGFueVtdIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICByZXR1cm4gcm93Lmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCA/IHJvdyA6IG51bGw7XG4gIH1cbiAgaWYgKGlzUGxhaW5PYmplY3Qocm93KSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwgZmllbGQubmFtZSkgPyByZWNvcmRbZmllbGQubmFtZV0gOiBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YXNldFJvd3MoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3QgPSBpc0RhdGFzZXRSb3dMaXN0KHJvd3MpID8gcm93cyA6IFtyb3dzXTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJyYXlSb3cgPSB0b0FycmF5Um93KGxpc3RbaV0sIGZpZWxkcyk7XG4gICAgaWYgKCFhcnJheVJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWQucHVzaChhcnJheVJvdyk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQXBwZW5kIG9yIHVwc2VydCByb3dzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC4gS2VlcHMgbGF5ZXJzIGFuZCByZS1ydW5zIGZpbHRlcnMuXG4gKiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZCAoSU5TRVJUIC8gY29uY2F0IG5vdCBpbXBsZW1lbnRlZCkuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dzLCBvcHRpb25zfTogVmlzU3RhdGVBY3Rpb25zLkFkZFRvRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVEYXRhc2V0Um93cyhyb3dzLCBkYXRhc2V0LmZpZWxkcyk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGFwcGxpZWQgPSBvcHRpb25zPy51cHNlcnRCeVxuICAgID8gZGF0YXNldC51cHNlcnRSb3dzKG5vcm1hbGl6ZWQsIG9wdGlvbnMudXBzZXJ0QnkpXG4gICAgOiBkYXRhc2V0LmFwcGVuZFJvd3Mobm9ybWFsaXplZCk7XG4gIGlmICghYXBwbGllZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBEZWxldGUgcm93cyBieSBpbmRleCBvciBieSBmaWVsZCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuXG4gKiBLZWVwcyBsYXllcnMuIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dJbmRleGVzLCBieUZpZWxkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZyb21EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlcyA9IGJ5RmllbGRcbiAgICA/IGRhdGFzZXQuZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzKGJ5RmllbGQuZmllbGQsIHRvQXJyYXkoYnlGaWVsZC52YWx1ZXMpKVxuICAgIDogdG9BcnJheShyb3dJbmRleGVzID8/IFtdKTtcbiAgaWYgKCFpbmRleGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWRhdGFzZXQucmVtb3ZlUm93cyhpbmRleGVzKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBmYWlsZWQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaCB3aXRob3V0IGRyb3BwaW5nIGV4aXN0aW5nIHJvd3MuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZXJyb3J9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgICAgICByZWZyZXNoU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICByZWZyZXNoRXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXJzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+XG4gICAgICB0bC5maWVsZCAmJiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdXG4gICAgICAgID8gey4uLnRsLCBmaWVsZDogey4uLnRsLmZpZWxkLCBuYW1lOiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdfX1cbiAgICAgICAgOiB0bFxuICAgICk7XG4gICAgaWYgKHRleHRMYWJlbC5zb21lKCh0bCwgaSkgPT4gdGwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaV0pKSB7XG4gICAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSB0ZXh0TGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuYW1lKSA+IC0xKTtcblxuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgU2V0KG5ld1RhYmxlLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbHVtbiBpcyBnb25lOiBkcm9wIGEgc2luZ2xlLWRhdGFzZXQgZmlsdGVyLCBzcGxpY2UgaXQgb3V0IG9mIGEgc3luY2VkIG9uZVxuICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYnJ1c2ggZmlsdGVycyBjYXJyeSBhIHNlY29uZCB5LWF4aXMgZmllbGQ7IGZvbGxvdyBhIHJlbmFtZSB0aGVyZSB0b29cbiAgICAgIGNvbnN0IHlBeGlzID1cbiAgICAgICAgdXBkYXRlZC55QXhpcz8ubmFtZSAmJlxuICAgICAgICAocmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdXG4gICAgICAgICAgPyB7Li4udXBkYXRlZC55QXhpcywgbmFtZTogcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdfVxuICAgICAgICAgIDogbmV3RmllbGRzQnlOYW1lLmhhcyh1cGRhdGVkLnlBeGlzLm5hbWUpXG4gICAgICAgICAgPyB1cGRhdGVkLnlBeGlzXG4gICAgICAgICAgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gcmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gMy4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgKGdwdUZpbHRlciAvIGZpbHRlclJlY29yZCAvIGZpbHRlcmVkSW5kZXgpXG4gIG5ld1RhYmxlLmZpbHRlclRhYmxlKFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKSxcbiAgICB7fVxuICApO1xuXG4gIC8vIDQuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBBcnJheS5mcm9tKGZpbGVzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkOiBmaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9uc1xuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLCBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9uc30pLmJpbWFwKFxuICAgIC8vIHByZXR0aWVyIGlnbm9yZVxuICAgIC8vIHN1Y2Nlc3NcbiAgICBnZW4gPT5cbiAgICAgIG5leHRGaWxlQmF0Y2goe1xuICAgICAgICBnZW4sXG4gICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDogcmVzdWx0LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2h9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgIGZpbGVOYW1lLmVuZHNXaXRoKCdhcnJvdycpICYmXG4gICAgYWNjdW11bGF0ZWQ/LmRhdGE/Lmxlbmd0aCA+IDBcbiAgICAgID8gW1xuICAgICAgICAgIC8vIFNraXAgY29tcGFjdGlvbiB3aGlsZSBiYXRjaGVzIGFyZSBzdGlsbCBhcnJpdmluZy4gVGhlIGNvbXBsZXRlZFxuICAgICAgICAgIC8vIGZpbGUgaXMgY29tcGFjdGVkIG9uY2UgaW4gcHJvY2Vzc0ZpbGVDb250ZW50LlxuICAgICAgICAgIFBST0NFU1NfRklMRV9EQVRBKHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHsuLi5hY2N1bXVsYXRlZCwgc2tpcEFycm93Q29tcGFjdDogdHJ1ZX0sXG4gICAgICAgICAgICBmaWxlQ2FjaGU6IFtdXG4gICAgICAgICAgfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsSUFBSSxRQUFPLFlBQVk7QUFFL0IsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUFRQyxPQUFPLElBQUlDLE9BQU8sUUFBTyxlQUFlO0FBQ2hELE9BQU9DLFNBQVMsTUFBTSw2QkFBNkI7QUFDbkQsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxPQUFPLE1BQU0sMkJBQTJCO0FBQy9DLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxHQUFHLE1BQU0sdUJBQXVCO0FBQ3ZDLE9BQU9DLElBQUksSUFBR0MscUJBQXFCLEVBQUVDLFFBQVEsUUFBTyxrQkFBa0I7QUFFdEU7QUFDQSxTQUNFQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLFdBQVcsUUFDTixrQkFBa0I7QUFDekI7QUFDQSxTQUNFQyxlQUFlLEVBTWZDLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyxpQkFBaUIsRUFDakJDLGVBQWUsRUFDZkMsb0JBQW9CLEVBQ3BCQyw4QkFBOEIsRUFDOUJDLG1CQUFtQixFQUNuQkMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxTQUFTLEVBQ1RDLGtCQUFrQixFQUNsQkMsU0FBUyxJQUFJQyxZQUFZLEVBQ3pCQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUVqQkMsc0JBQXNCLEVBQ3RCQyxvQkFBb0IsRUFDcEJDLHFCQUFxQixFQUNyQkMsbUJBQW1CLEVBQ25CQyxzQkFBc0IsUUFDakIsb0JBQW9C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QTtNQUNBO01BQ0E7TUFDQSxJQUNFRyxZQUFZLElBQ1pELGFBQWEsQ0FBQ3RmLFdBQVcsS0FBS2plLFNBQVMsS0FBQXM5QixxQkFBQSxHQUN2Q0QsYUFBYSxDQUFDRSxhQUFhLENBQUN0ZixXQUFXLENBQUMsY0FBQXFmLHFCQUFBLGVBQXhDQSxxQkFBQSxDQUEwQ3o2QixNQUFNLElBQ2hEcTZCLGFBQWEsRUFDYjtRQUNBRyxhQUFhLENBQUNILGFBQWEsQ0FBQyxHQUFHakIsU0FBUyxDQUFDMTVCLEdBQUcsQ0FBQyxVQUFBbXhCLElBQUk7VUFBQSxPQUFJQSxJQUFJLENBQUN0MkIsRUFBRTtRQUFBLEVBQUM7TUFDL0Q7SUFDRixDQUFDLENBQUM7SUFFRixPQUFPaWdDLGFBQWE7RUFDdEIsQ0FBQyxFQUNEbjdCLEtBQ0YsQ0FBQztFQUVELE9BQU8wQyxTQUFTO0FBQ2xCO0FBRUEsU0FBUzY0Qix1QkFBdUJBLENBQzlCdjdCLEtBQUssRUFDTHM3QixZQUFZLEVBQUFFLE1BQUEsRUFFWjtFQUFBLElBREMvM0IsSUFBSSxHQUFBKzNCLE1BQUEsQ0FBSi8zQixJQUFJO0lBQUVzWSxXQUFXLEdBQUF5ZixNQUFBLENBQVh6ZixXQUFXO0lBQUVnZixrQkFBa0IsR0FBQVMsTUFBQSxDQUFsQlQsa0JBQWtCO0lBQUVsQixZQUFZLEdBQUEyQixNQUFBLENBQVozQixZQUFZO0VBRXBEO0VBQ0E7RUFDQSxJQUFJbjNCLFNBQVMsR0FBR2czQixtQkFBbUIsQ0FBQzE1QixLQUFLLEVBQUVzN0IsWUFBWSxFQUFFO0lBQUM3M0IsSUFBSSxFQUFKQSxJQUFJO0lBQUVzWSxXQUFXLEVBQVhBLFdBQVc7SUFBRThkLFlBQVksRUFBWkE7RUFBWSxDQUFDLENBQUM7RUFDM0YsSUFBTUosWUFBWSxHQUFHLENBQUFzQixrQkFBa0IsYUFBbEJBLGtCQUFrQix1QkFBbEJBLGtCQUFrQixDQUFHTyxZQUFZLENBQUMsS0FBSS9CLG1CQUFtQixDQUFDK0IsWUFBWSxDQUFDO0VBRTVGLElBQUk3QixZQUFZLEVBQUU7SUFDaEIvMkIsU0FBUyxHQUFHM04sT0FBTyxDQUFDMGtDLFlBQVksQ0FBQyxDQUFDbnRCLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVrdkIsV0FBVyxFQUFLO01BQzlEO01BQ0E7TUFDQSxPQUFPdkIscUJBQXFCLENBQUMzdEIsSUFBSSxFQUFFa3ZCLFdBQVcsRUFBRUEsV0FBVyxDQUFDO0lBQzlELENBQUMsRUFBRS80QixTQUFTLENBQUM7RUFDZjtFQUNBLE9BQU9BLFNBQVM7QUFDbEIiLCJpZ25vcmVMaXN0IjpbXX0=
5398
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJlcnJvck5vdGlmaWNhdGlvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwidG9Ta2V0Y2hGZWF0dXJlIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJwYXJzZUxheWVyQ29uZmlnIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIktlcGxlckdMU2NoZW1hIiwiZ2V0RmlsZXNUb1BhcnNlIiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwicHJvY2Vzc0dlb2pzb24iLCJhc3NpZ25HcHVDaGFubmVsIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicGluVGFibGVDb2x1bW5zIiwic2V0RmlsdGVyR3B1TW9kZSIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJmaW5kRmllbGRzVG9TaG93IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwiZ2V0TmV3TGF5ZXJHcm91cCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImdldEZsYXRMYXllck9yZGVyIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwiZml4RWZmZWN0T3JkZXIiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJtZXJnZUZpbHRlckRvbWFpbiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiY3JlYXRlRWZmZWN0IiwiZmluZE1hcEJvdW5kcyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImNoYXJ0cyIsImNoYXJ0c1RvQmVNZXJnZWQiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXJJZCIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlcnIiLCJlIiwiZiIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsImFyZ3VtZW50cyIsIm5ld1RleHRMYWJlbCIsInNsaWNlIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibmV3VHlwZSIsIm9sZElkIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwiX3RvUHJvcGVydHlLZXkiLCJyZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQiLCJ2aXN1YWxDaGFubmVsIiwiaW5jb21pbmciLCJfdHlwZW9mIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImNoYW5uZWxLZXkiLCJqZW5rcyIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibmV4dEZpbHRlciIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJoYXMiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsInByb3ZpZGVkQW5nbGUiLCJhbmdsZSIsImRlcml2ZWRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIlRFWFQiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidGV4dFZlcnRpY2FsQWxpZ24iLCJkZWZhdWx0QW5nbGUiLCJQT0lOVCIsImFybUxlbmd0aCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOSIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjEiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9kYXRhc2V0JG1ldGFkYXRhNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsImxvYWRlZCIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIndyYXAiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJhYnJ1cHQiLCJmb3JtYXQiLCJieXBhc3NDYWNoZSIsInNlbnQiLCJFcnJvciIsImV0YWciLCJsYXN0TW9kaWZpZWQiLCJsYXN0RmV0Y2hlZEF0IiwiRGF0ZSIsIm5vdyIsInJlZnJlc2hTdGF0dXMiLCJzdG9wIiwiSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIkZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyIsIl9yZWYyNiIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImNyZWF0ZU5ld0RhdGFFbnRyeVRhc2siLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyNyIsIm9uUHJvZ3Jlc3MiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhcmciLCJSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlV2l0aFByb2dyZXNzIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjI4IiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50IiwiTWF0aCIsInJvdW5kIiwicGVyY2VudCIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMjkiLCJfZGF0YXNldCRtZXRhZGF0YTQiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsImN1cnJlbnQiLCJldmVyeSIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYzMCIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhIiwiaXNEYXRhc2V0Um93TGlzdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMxIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzIiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzMiLCJTdHJpbmciLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiX3JlZjM0IiwiZGF0YXNldEluZGV4IiwiX3JlZjM0JGluZm8iLCJyZXN0IiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXRzQWxsU2V0dGxlZFRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsImxheWVyc05vdEluU3BsaXRNYXBzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNSIsIl9yZWYzNiIsImNrZXkiLCJjb2wiLCJfcmVmMzciLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwiY29tcGFuaW9uRmlsZXMiLCJmcm9tIiwiZmlsZXNUb0xvYWQiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiZ2VuIiwiY29udGVudCIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjM4IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMzgkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsInNraXBBcnJvd0NvbXBhY3QiLCJfcmVmMzkiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQwIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWY0MSIsImRhdGFJZHMiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwibWVyZ2VkIiwiX3JlZjQzIiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY0NCIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY0NSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNDUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjQ2IiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDciLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNDgiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNDkiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUwIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MSIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwidmFsdWVBdCIsImpvaW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY1MiIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwiZ2V0TWFwcGVkVmFsdWUiLCJmaWx0ZXJQcm9wcyIsIm1hcHBlZFZhbHVlIiwieWllbGRGb3JQYWludCIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl94NCIsIl9yZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfY2FsbGVlNCIsIl9yZWY1MyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTQiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1NSIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjU2IiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1NyIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwiY2xlYXJlZFN0YXRlIiwibGFiZWxJZCIsImZsb29yIiwicmFuZG9tIiwiZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJleHRyYWN0ZWQiLCJyb3dDb3VudCIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjU5IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY2MCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNjEiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImxheWVyVGltZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY2MyIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJpZHMiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNjQiLCJhY2N1U3RhdGUiLCJfcmVmNjUiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNjYiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3Ncbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgaXNTYXZlZExheWVyQ29uZmlnVjEsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2dldEZpbGVzVG9QYXJzZSwgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldCxcbiAgQ2hhcnRDb25maWcsXG4gIExheWVyQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIEtlcGxlclRhYmxlLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIGRpc2FibGUgc3RhY2sgY2FwdHVyZSBmb3Igd2l0aFRhc2sgY2FsbHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBzdHJpY3QgcmVkdWNlciBjb250ZXh0XG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+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/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwXG4gIH0pO1xuICBpZiAoIWxvYWRlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhIGxvYWRlZCBmcm9tICR7ZGF0YXNldC5tZXRhZGF0YT8uc291cmNlfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YXNldCxcbiAgICBkYXRhOiBsb2FkZWQuZGF0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIGV0YWc6IGxvYWRlZC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBsb2FkZWQubGFzdE1vZGlmaWVkLFxuICAgICAgLi4uKHR5cGVvZiBsb2FkZWQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogbG9hZGVkLnNpemV9IDoge30pLFxuICAgICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJ1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soZGF0YXNldCkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgc2l6ZTogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgPT09ICdudW1iZXInID8gbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXRhZzogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgPT09ICdzdHJpbmcnID8gbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdE1vZGlmaWVkOlxuICAgICAgICAgIHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgICByZWZyZXNoRGF0YXNldFByb2dyZXNzKGRhdGFJZCwgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApKVxuICAgIH0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IHJlZnJlc2hEYXRhc2V0U3VjY2VzcyhkYXRhSWQsIHJlc3VsdCksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiByZWZyZXNoRGF0YXNldEVycm9yKGRhdGFJZCwgZXJyb3IpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IHJlZnJlc2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgIT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoUHJvZ3Jlc3MgPT09IG5leHRQZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtyZWZyZXNoUHJvZ3Jlc3M6IG5leHRQZXJjZW50fSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZXNFcXVhbChjdXJyZW50OiB7bmFtZTogc3RyaW5nfVtdLCBpbmNvbWluZz86IHtuYW1lOiBzdHJpbmd9W10gfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghaW5jb21pbmc/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gaW5jb21pbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjdXJyZW50LmV2ZXJ5KChmaWVsZCwgaSkgPT4gZmllbGQubmFtZSA9PT0gaW5jb21pbmdbaV0ubmFtZSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHJlbW90ZSBzbmFwc2hvdCBjaGFuZ2VzIGNvbHVtbiBuYW1lcywgb2xkIGxheWVyIGZpZWxkSWR4IC8gZmlsdGVyIG5hbWVzXG4gKiBjYW4gcG9pbnQgYXQgdGhlIHdyb25nIGNvbHVtbi4gUmUtYmluZCBieSBuYW1lIGFuZCBkcm9wIGNvbmZpZ3MgdGhhdCBubyBsb25nZXIgZml0LlxuICovXG5mdW5jdGlvbiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgbmV4dExheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkTGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChsYXllcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYm91bmQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMsIGxheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICAgIGlmIChyZWJvdW5kPy5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChyZWJvdW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZExheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZXh0TGF5ZXJPcmRlciA9IHN0YXRlLmxheWVyT3JkZXI7XG4gIGxldCBuZXh0U3BsaXRNYXBzID0gc3RhdGUuc3BsaXRNYXBzO1xuICBkcm9wcGVkTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIG5leHRMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5leHRMYXllck9yZGVyLCBsYXllci5pZCk7XG4gICAgbmV4dFNwbGl0TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhuZXh0U3BsaXRNYXBzLCBsYXllcik7XG4gIH0pO1xuXG4gIGNvbnN0IG5leHRMYXllckRhdGEgPSBuZXh0TGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgY29uc3Qgb2xkSWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChvbGRMYXllciA9PiBvbGRMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIHJldHVybiBvbGRJZHggPj0gMCA/IHN0YXRlLmxheWVyRGF0YVtvbGRJZHhdIDoge307XG4gIH0pO1xuXG4gIGNvbnN0IGZpbHRlcnNGb3JEYXRhc2V0ID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IG90aGVyRmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcblxuICBjb25zdCB7dmFsaWRhdGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoXG4gICAgey4uLnN0YXRlLCBkYXRhc2V0cywgbGF5ZXJzOiBuZXh0TGF5ZXJzfSxcbiAgICBmaWx0ZXJzRm9yRGF0YXNldFxuICApO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXJzID0gWy4uLm90aGVyRmlsdGVycywgLi4udmFsaWRhdGVkXTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIG5leHRGaWx0ZXJzLFxuICAgIG5leHRMYXllcnNcbiAgKTtcblxuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBsYXllcnM6IG5leHRMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXh0TGF5ZXJEYXRhLFxuICAgIGxheWVyT3JkZXI6IG5leHRMYXllck9yZGVyLFxuICAgIHNwbGl0TWFwczogbmV4dFNwbGl0TWFwcyxcbiAgICBmaWx0ZXJzOiBuZXh0RmlsdGVyc1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZmluaXNoZWQgcmVtb3RlIHJlZnJlc2g6IGtlZXAgbGF5ZXJzLCByZS1ydW4gZmlsdGVycyBhbmQgbGF5ZXIgZGF0YS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJlc3VsdH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YVBhdGNoID0ge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZCxcbiAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgIC8vIEFsd2F5cyB3cml0ZSB2YWxpZGF0b3JzLiBBIDIwMCB0aGF0IG9taXRzIHRoZW0gbXVzdCBub3Qga2VlcCB0aGUgcHJldmlvdXNcbiAgICAvLyBFVGFnIG9yIGEgbGF0ZXIgMzA0IGNhbiBza2lwIGEgYm9keSB3ZSBubyBsb25nZXIgaGF2ZS5cbiAgICBldGFnOiByZXN1bHQuZXRhZyxcbiAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgLi4uKHR5cGVvZiByZXN1bHQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogcmVzdWx0LnNpemV9IDoge30pXG4gIH07XG5cbiAgY29uc3Qgc2NoZW1hVW5jaGFuZ2VkID0gZmllbGROYW1lc0VxdWFsKGRhdGFzZXQuZmllbGRzLCByZXN1bHQuZGF0YT8uZmllbGRzKTtcblxuICAvLyBBcHBseSB0aGUgc25hcHNob3QgdG8gdGhlIHRhYmxlIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUuIFByb2dyZXNzIG1heSBoYXZlXG4gIC8vIGNvcGllZCBpdCBvZmYgdGhlIG9iamVjdCB0aGF0IHN0YXJ0ZWQgdGhlIGZldGNoOyB0aGUgdGFzayBuZXZlciBtdXRhdGVzIGl0LlxuICBpZiAoIXJlc3VsdC5ub3RNb2RpZmllZCAmJiByZXN1bHQuZGF0YSkge1xuICAgIC8vIEtlcGxlclRhYmxlLnVwZGF0ZSBpcyBhc3luYyBzbyBEdWNrREIgY2FuIGF3YWl0IEFycm93IGNvbnZlcnNpb24uIFRoZVxuICAgIC8vIENTVi9HZW9KU09OIHBhdGggKGFuZCBLZXBsZXJUYWJsZS5pbXBvcnREYXRhKSBydW4gc3luY2hyb25vdXNseSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgYXdhaXQsIHNvIHRoZSBzdG9yZSB0YWJsZSBpcyB1cGRhdGVkIGJlZm9yZSB3ZSBjb3B5IGl0IGJlbG93LlxuICAgIHZvaWQgZGF0YXNldC51cGRhdGUocmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaGVkID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwgbWV0YWRhdGFQYXRjaCk7XG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiByZWZyZXNoZWRcbiAgfTtcblxuICBpZiAocmVzdWx0Lm5vdE1vZGlmaWVkIHx8ICFyZXN1bHQuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzXG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2NoZW1hVW5jaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShzdGF0ZSwgZGF0YUlkLCBkYXRhc2V0cyk7XG4gIH1cblxuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbmZ1bmN0aW9uIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHN0YXRlOiBWaXNTdGF0ZSwgZGF0YUlkOiBzdHJpbmcpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YXNldFJvd0xpc3QoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXVxuKTogcm93cyBpcyBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8ICFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3MpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGNvbHVtbi1vcmRlcmVkIHJvdyBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzOyBhIGxpc3Qgb2Ygcm93cyBpc1xuICAvLyBhbiBhcnJheSBvZiBhcnJheXMgb3IgYW4gYXJyYXkgb2YgZmllbGQtbmFtZSByZWNvcmRzLlxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzWzBdKSB8fCBpc1BsYWluT2JqZWN0KHJvd3NbMF0pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5Um93KHJvdzogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3csIGZpZWxkczogRmllbGRbXSk6IGFueVtdIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICByZXR1cm4gcm93Lmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCA/IHJvdyA6IG51bGw7XG4gIH1cbiAgaWYgKGlzUGxhaW5PYmplY3Qocm93KSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwgZmllbGQubmFtZSkgPyByZWNvcmRbZmllbGQubmFtZV0gOiBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YXNldFJvd3MoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3QgPSBpc0RhdGFzZXRSb3dMaXN0KHJvd3MpID8gcm93cyA6IFtyb3dzXTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJyYXlSb3cgPSB0b0FycmF5Um93KGxpc3RbaV0sIGZpZWxkcyk7XG4gICAgaWYgKCFhcnJheVJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWQucHVzaChhcnJheVJvdyk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQXBwZW5kIG9yIHVwc2VydCByb3dzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC4gS2VlcHMgbGF5ZXJzIGFuZCByZS1ydW5zIGZpbHRlcnMuXG4gKiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZCAoSU5TRVJUIC8gY29uY2F0IG5vdCBpbXBsZW1lbnRlZCkuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dzLCBvcHRpb25zfTogVmlzU3RhdGVBY3Rpb25zLkFkZFRvRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVEYXRhc2V0Um93cyhyb3dzLCBkYXRhc2V0LmZpZWxkcyk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGFwcGxpZWQgPSBvcHRpb25zPy51cHNlcnRCeVxuICAgID8gZGF0YXNldC51cHNlcnRSb3dzKG5vcm1hbGl6ZWQsIG9wdGlvbnMudXBzZXJ0QnkpXG4gICAgOiBkYXRhc2V0LmFwcGVuZFJvd3Mobm9ybWFsaXplZCk7XG4gIGlmICghYXBwbGllZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBEZWxldGUgcm93cyBieSBpbmRleCBvciBieSBmaWVsZCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuXG4gKiBLZWVwcyBsYXllcnMuIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dJbmRleGVzLCBieUZpZWxkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZyb21EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlcyA9IGJ5RmllbGRcbiAgICA/IGRhdGFzZXQuZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzKGJ5RmllbGQuZmllbGQsIHRvQXJyYXkoYnlGaWVsZC52YWx1ZXMpKVxuICAgIDogdG9BcnJheShyb3dJbmRleGVzID8/IFtdKTtcbiAgaWYgKCFpbmRleGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWRhdGFzZXQucmVtb3ZlUm93cyhpbmRleGVzKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBmYWlsZWQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaCB3aXRob3V0IGRyb3BwaW5nIGV4aXN0aW5nIHJvd3MuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZXJyb3J9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgICAgICByZWZyZXNoU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICByZWZyZXNoRXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+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+IHtcbiAgbGV0IHtsb2FkaW5nSW5kaWNhdG9yVmFsdWV9ID0gc3RhdGU7XG4gIGlmICghbG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlID0gMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlOiBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGZpbHRlcklkeDogbnVtYmVyKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgaWYgKChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkge1xuICAgIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwc1xuICAgICAgPyBzbmFwVG9NYXJrcyh0aW1lbGluZVZhbHVlLCBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzKVxuICAgICAgOiB0aW1lbGluZVZhbHVlO1xuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKHN0YXRlLCB7dmFsdWV9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyLnZhbHVlW2ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSkge1xuICAgIHJldHVybiBmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZSA/PyBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbiAgfVxuXG4gIHJldHVybiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciwgbmV3TW9kZTogbnVtYmVyKSB7XG4gIHJldHVybiAhKFxuICAgIGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSAmJiBuZXdNb2RlID09PSBTWU5DX1RJTUVMSU5FX01PREVTLnN0YXJ0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChzdGF0ZSwgZmlsdGVyKSB7XG4gIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgbGV0IGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbEluZGV4ID0gaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5yZWR1Y2UoKGN1cnJlbnRJbmRleCwgbCkgPT4ge1xuICAgICAgaWYgKGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmZpbmRJbmRleChpID0+IGkgPT09IGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gbmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCA8IGN1cnJlbnRJbmRleCA/IG5ld0luZGV4IDogY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0sIFRJTUVfSU5URVJWQUxTX09SREVSRUQubGVuZ3RoIC0gMSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGxheWVyVGltZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbbGF5ZXJUaW1lSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3JkZXIgdG8gcHJlc2VydmUgZm9yIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgbWVyZ2VkIGJhY2suXG4gKlxuICogYGlkc2AgY29tZXMgZnJvbSB0aGUgc2VyaWFsaXplZCBzdGF0ZSwgc28gaXQgbGlzdHMgZXZlcnl0aGluZyBidXQgdGhlIGl0ZW1zXG4gKiBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvOiBhbiBhcHAgcmVmcmVzaGluZyBzZXZlcmFsXG4gKiBkYXRhc2V0cyBpbiBhIHJvdyBwcmVwYXJlcyB0aGUgc2Vjb25kIHJlcGxhY2VtZW50IGJlZm9yZSB0aGUgZmlyc3Qgb25lJ3NcbiAqIGl0ZW1zIGhhdmUgbWVyZ2VkIGJhY2suIFdyaXRpbmcgYGlkc2AgYXMgaXQgaXMgd291bGQgZHJvcCB0aG9zZSwgYW5kXG4gKiBgaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcmAgcHV0cyBhbiBpdGVtIGl0IGNhbm5vdCBwbGFjZSBhdCB0aGUgZnJvbnQg4oCUXG4gKiBzbyB0aGV5IHdvdWxkIGNvbWUgYmFjayByZXZlcnNlZC4gV2hlcmUgdGhleSBiZWxvbmcgaXMgd2hhdCB0aGUgb3JkZXIgd3JpdHRlblxuICogd2hlbiB0aGV5IHdlcmUgcGFya2VkIGFscmVhZHkgc2F5cywgc28gdGhhdCBvcmRlciBpcyBrZXB0IGZvciB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICBwcmV2aW91c09yZGVyOiBzdHJpbmdbXSA9IFtdLFxuICBpZHM6IHN0cmluZ1tdLFxuICBwYXJrZWQ6IHtpZD86IHN0cmluZ31bXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJrZWRJZHMgPSBwYXJrZWRcbiAgICAubWFwKGl0ZW0gPT4gaXRlbT8uaWQpXG4gICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgIWlkcy5pbmNsdWRlcyhpZCBhcyBzdHJpbmcpKTtcblxuICBpZiAoIXBhcmtlZElkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgY29uc3Qga25vd24gPSBuZXcgU2V0KFsuLi5pZHMsIC4uLnBhcmtlZElkc10pO1xuICBjb25zdCBvcmRlcmVkID0gKHByZXZpb3VzT3JkZXIgfHwgW10pLmZpbHRlcihpZCA9PiBrbm93bi5oYXMoaWQpKTtcbiAgY29uc3QgcmVzdCA9IFsuLi5pZHMsIC4uLnBhcmtlZElkc10uZmlsdGVyKGlkID0+ICFvcmRlcmVkLmluY2x1ZGVzKGlkKSk7XG5cbiAgcmV0dXJuIFsuLi5vcmRlcmVkLCAuLi5yZXN0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2hhdCBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvIGFuZCBoYXMgbm90XG4gICAgICAgIC8vIG1lcmdlZCBiYWNrIHlldCwgcmVhZCBiZWZvcmUgdGhpcyBvbmUgcGFya3MgYW55dGhpbmcgb2YgaXRzIG93bi5cbiAgICAgICAgY29uc3QgcGFya2VkRWxzZXdoZXJlID1cbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdG9BcnJheShyZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdID8/IFtdKVxuICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0sXG4gICAgICAgICAgICBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCksXG4gICAgICAgICAgICBwYXJrZWRFbHNld2hlcmVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLElBQUksUUFBTyxZQUFZO0FBRS9CLE9BQU9DLElBQUksTUFBTSxtQkFBbUI7QUFDcEMsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FBUUMsT0FBTyxJQUFJQyxPQUFPLFFBQU8sZUFBZTtBQUNoRCxPQUFPQyxTQUFTLE1BQU0sNkJBQTZCO0FBQ25ELE9BQU9DLEdBQUcsTUFBTSx1QkFBdUI7QUFDdkMsT0FBT0MsT0FBTyxNQUFNLDJCQUEyQjtBQUMvQyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxJQUFJLElBQUdDLHFCQUFxQixFQUFFQyxRQUFRLFFBQU8sa0JBQWtCO0FBRXRF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