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

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.
Files changed (47) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/combined-updaters.js +166 -8
  4. package/dist/cjs/composers.js +4 -5
  5. package/dist/cjs/dataset-ops-updaters.js +375 -0
  6. package/dist/cjs/dataset-ops-updaters.spec.js +382 -0
  7. package/dist/cjs/export-utils.js +118 -46
  8. package/dist/cjs/interaction-utils.js +166 -6
  9. package/dist/cjs/layer-utils.js +135 -9
  10. package/dist/cjs/ui-state-updaters.js +134 -51
  11. package/dist/cjs/ui-state.js +2 -2
  12. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  13. package/dist/cjs/vis-state-merger.js +99 -25
  14. package/dist/cjs/vis-state-selectors.js +5 -4
  15. package/dist/cjs/vis-state-updaters.js +1077 -256
  16. package/dist/cjs/vis-state.js +2 -2
  17. package/dist/column-edit-reconcile.d.ts +4 -0
  18. package/dist/column-edit-updaters.spec.d.ts +1 -0
  19. package/dist/combined-updaters.d.ts +21 -1
  20. package/dist/composers.d.ts +3 -0
  21. package/dist/dataset-ops-updaters.d.ts +21 -0
  22. package/dist/dataset-ops-updaters.spec.d.ts +1 -0
  23. package/dist/esm/column-edit-reconcile.js +95 -0
  24. package/dist/esm/column-edit-updaters.spec.js +839 -0
  25. package/dist/esm/combined-updaters.js +166 -8
  26. package/dist/esm/composers.js +3 -2
  27. package/dist/esm/dataset-ops-updaters.js +357 -0
  28. package/dist/esm/dataset-ops-updaters.spec.js +381 -0
  29. package/dist/esm/export-utils.js +117 -45
  30. package/dist/esm/interaction-utils.js +159 -3
  31. package/dist/esm/layer-utils.js +133 -9
  32. package/dist/esm/ui-state-updaters.js +133 -50
  33. package/dist/esm/ui-state.js +2 -2
  34. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  35. package/dist/esm/vis-state-merger.js +99 -26
  36. package/dist/esm/vis-state-selectors.js +5 -4
  37. package/dist/esm/vis-state-updaters.js +1020 -263
  38. package/dist/esm/vis-state.js +2 -2
  39. package/dist/export-utils.d.ts +2 -2
  40. package/dist/interaction-utils.d.ts +25 -2
  41. package/dist/layer-utils.d.ts +17 -0
  42. package/dist/ui-state-updaters.d.ts +30 -0
  43. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  44. package/dist/vis-state-merger.d.ts +10 -2
  45. package/dist/vis-state-updaters.d.ts +61 -15
  46. package/dist/vis-state.d.ts +20 -0
  47. package/package.json +17 -17
@@ -13,6 +13,7 @@ exports.calculateLayerData = calculateLayerData;
13
13
  exports.computeDeckLayers = computeDeckLayers;
14
14
  exports.findDefaultLayer = findDefaultLayer;
15
15
  exports.findParentGroupForLayer = findParentGroupForLayer;
16
+ exports.getAncestorLayerGroups = getAncestorLayerGroups;
16
17
  exports.getCustomDeckLayers = getCustomDeckLayers;
17
18
  exports.getFlatLayerOrder = getFlatLayerOrder;
18
19
  exports.getIndexFromLayerEntryId = getIndexFromLayerEntryId;
@@ -23,6 +24,7 @@ exports.getLayerOrderFromLayers = getLayerOrderFromLayers;
23
24
  exports.getNewLayerGroup = getNewLayerGroup;
24
25
  exports.isLayerPresentInLayerOrder = isLayerPresentInLayerOrder;
25
26
  exports.isLayerRenderable = isLayerRenderable;
27
+ exports.isLayerShownInLegend = isLayerShownInLegend;
26
28
  exports.isLayerVisible = isLayerVisible;
27
29
  exports.mergeLayerVisConfigForNewDatasets = mergeLayerVisConfigForNewDatasets;
28
30
  exports.prepareLayersForDeck = prepareLayersForDeck;
@@ -35,12 +37,14 @@ exports.replaceLayerEntryInLayerOrder = replaceLayerEntryInLayerOrder;
35
37
  exports.updateLayerGroupInLayerOrder = updateLayerGroupInLayerOrder;
36
38
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
37
39
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
40
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
38
41
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
39
42
  var _console = _interopRequireDefault(require("global/console"));
40
43
  var _constants = require("@kepler.gl/constants");
41
44
  var _layers = require("@kepler.gl/layers");
42
45
  var _utils = require("@kepler.gl/utils");
43
46
  var _commonUtils = require("@kepler.gl/common-utils");
47
+ var _interactionUtils = require("./interaction-utils");
44
48
  var _deckglLayers = require("@kepler.gl/deckgl-layers");
45
49
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
46
50
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
@@ -200,12 +204,74 @@ function getLayerHoverProp(_ref) {
200
204
  fields: fields,
201
205
  fieldsToShow: fieldsToShow,
202
206
  layer: layer,
203
- currentTime: animationConfig.currentTime
207
+ currentTime: animationConfig.currentTime,
208
+ timezone: interactionConfig.tooltip.config.timezone
204
209
  };
205
210
  }
206
211
  }
207
212
  return null;
208
213
  }
214
+ var ZOOM_OPACITY_PROP_KEYS = ['opacity', 'lineOpacity', 'strokeOpacity'];
215
+
216
+ /** Stroke and outline props replace the parent opacity, so they need the same factor. */
217
+ function scaleZoomOpacitySubLayerProps(subLayerProps, factor) {
218
+ if (!subLayerProps) {
219
+ return undefined;
220
+ }
221
+ var changed = false;
222
+ var next = {};
223
+ for (var _i = 0, _Object$keys = Object.keys(subLayerProps); _i < _Object$keys.length; _i++) {
224
+ var id = _Object$keys[_i];
225
+ var sublayer = subLayerProps[id];
226
+ if (!sublayer || (0, _typeof2["default"])(sublayer) !== 'object') {
227
+ next[id] = sublayer;
228
+ continue;
229
+ }
230
+ var scaled = _objectSpread({}, sublayer);
231
+ var sublayerChanged = false;
232
+ var _iterator = _createForOfIteratorHelper(ZOOM_OPACITY_PROP_KEYS),
233
+ _step;
234
+ try {
235
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
236
+ var key = _step.value;
237
+ if (typeof sublayer[key] === 'number') {
238
+ scaled[key] = sublayer[key] * factor;
239
+ sublayerChanged = true;
240
+ }
241
+ }
242
+ } catch (err) {
243
+ _iterator.e(err);
244
+ } finally {
245
+ _iterator.f();
246
+ }
247
+ next[id] = sublayerChanged ? scaled : sublayer;
248
+ if (sublayerChanged) {
249
+ changed = true;
250
+ }
251
+ }
252
+ return changed ? next : undefined;
253
+ }
254
+ function applyZoomOpacityToDeckLayer(deckLayer, factor) {
255
+ var _deckLayer$props, _deckLayer$props2, _deckLayer$props3;
256
+ if (Array.isArray(deckLayer)) {
257
+ return deckLayer.map(function (layer) {
258
+ return applyZoomOpacityToDeckLayer(layer, factor);
259
+ });
260
+ }
261
+ if (!deckLayer || factor === 1 || typeof deckLayer.clone !== 'function') {
262
+ return deckLayer;
263
+ }
264
+ var baseOpacity = (_deckLayer$props = deckLayer.props) === null || _deckLayer$props === void 0 ? void 0 : _deckLayer$props.opacity;
265
+ var opacity = (typeof baseOpacity === 'number' ? baseOpacity : 1) * factor;
266
+ var subLayerProps = scaleZoomOpacitySubLayerProps((_deckLayer$props2 = deckLayer.props) === null || _deckLayer$props2 === void 0 ? void 0 : _deckLayer$props2._subLayerProps, factor);
267
+ return deckLayer.clone(_objectSpread({
268
+ opacity: opacity,
269
+ // Fully faded layers are not pickable.
270
+ visible: ((_deckLayer$props3 = deckLayer.props) === null || _deckLayer$props3 === void 0 ? void 0 : _deckLayer$props3.visible) !== false && factor > 0
271
+ }, subLayerProps ? {
272
+ _subLayerProps: subLayerProps
273
+ } : {}));
274
+ }
209
275
  function renderDeckGlLayer(props, layerCallbacks) {
210
276
  var datasets = props.datasets,
211
277
  layer = props.layer,
@@ -226,7 +292,7 @@ function renderDeckGlLayer(props, layerCallbacks) {
226
292
  // instead of leaking undefined into deck.gl's visible prop
227
293
  var visible = !mapLayers || Boolean(mapLayers[layer.id]);
228
294
  // Layer is Layer class
229
- return layer.renderLayer({
295
+ var rendered = layer.renderLayer({
230
296
  data: data,
231
297
  gpuFilter: gpuFilter,
232
298
  idx: layerIndex,
@@ -239,6 +305,8 @@ function renderDeckGlLayer(props, layerCallbacks) {
239
305
  dataset: dataset,
240
306
  experimentalContext: experimentalContext
241
307
  });
308
+ var factor = (0, _interactionUtils.getLayerZoomOpacityFactor)(layer.id, mapState === null || mapState === void 0 ? void 0 : mapState.zoom, interactionConfig);
309
+ return applyZoomOpacityToDeckLayer(rendered, factor);
242
310
  }
243
311
  function isLayerRenderable(layer, layerData) {
244
312
  return layer.id !== _constants.GEOCODER_LAYER_ID && layer.shouldRenderLayer(layerData);
@@ -497,16 +565,74 @@ function getLayerGroupFromLayerOrder(layerOrder, layerGroupId) {
497
565
  return group;
498
566
  }
499
567
 
568
+ /**
569
+ * Groups that contain `entryId`, nearest parent first.
570
+ * `entryId` may be a layer id or a nested group id.
571
+ */
572
+ function getAncestorLayerGroups(layerOrder, entryId) {
573
+ var ancestors = [];
574
+ var _visit = function visit(entries) {
575
+ var _iterator2 = _createForOfIteratorHelper(entries),
576
+ _step2;
577
+ try {
578
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
579
+ var entry = _step2.value;
580
+ if (typeof entry === 'string') {
581
+ if (entry === entryId) {
582
+ return true;
583
+ }
584
+ continue;
585
+ }
586
+ if (!(0, _utils.isPlainObject)(entry)) {
587
+ continue;
588
+ }
589
+ var group = entry;
590
+ if (group.id === entryId) {
591
+ return true;
592
+ }
593
+ if (_visit(group.layerOrder)) {
594
+ ancestors.push(group);
595
+ return true;
596
+ }
597
+ }
598
+ } catch (err) {
599
+ _iterator2.e(err);
600
+ } finally {
601
+ _iterator2.f();
602
+ }
603
+ return false;
604
+ };
605
+ _visit(layerOrder);
606
+ return ancestors;
607
+ }
608
+
609
+ /**
610
+ * Whether a layer should be drawn in the map legend.
611
+ * A layer stays on the map when this is false. Missing flags count as included.
612
+ * An ancestor group with `isIncludedInLegend: false` hides the layer as well.
613
+ */
614
+ function isLayerShownInLegend(layer, layerOrder) {
615
+ if (layer.config.isIncludedInLegend === false) {
616
+ return false;
617
+ }
618
+ if (!(layerOrder !== null && layerOrder !== void 0 && layerOrder.length)) {
619
+ return true;
620
+ }
621
+ return getAncestorLayerGroups(layerOrder, layer.id).every(function (group) {
622
+ return group.isIncludedInLegend !== false;
623
+ });
624
+ }
625
+
500
626
  /**
501
627
  * Find the parent group that contains a given layer ID.
502
628
  * Returns undefined if the layer is at the root level.
503
629
  */
504
630
  function findParentGroupForLayer(layerOrder, layerId) {
505
- var _iterator = _createForOfIteratorHelper(layerOrder),
506
- _step;
631
+ var _iterator3 = _createForOfIteratorHelper(layerOrder),
632
+ _step3;
507
633
  try {
508
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
509
- var entry = _step.value;
634
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
635
+ var entry = _step3.value;
510
636
  if ((0, _utils.isPlainObject)(entry)) {
511
637
  var group = entry;
512
638
  if (group.layerOrder.some(function (e) {
@@ -519,9 +645,9 @@ function findParentGroupForLayer(layerOrder, layerId) {
519
645
  }
520
646
  }
521
647
  } catch (err) {
522
- _iterator.e(err);
648
+ _iterator3.e(err);
523
649
  } finally {
524
- _iterator.f();
650
+ _iterator3.f();
525
651
  }
526
652
  return undefined;
527
653
  }
@@ -640,4 +766,4 @@ function areAnyDeckLayersLoading(layers) {
640
766
  return layer.internalState && !layer.isLoaded;
641
767
  });
642
768
  }
643
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9sYXllcnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfZGVja2dsTGF5ZXJzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiZmluZERlZmF1bHRMYXllciIsImRhdGFzZXQiLCJsYXllckNsYXNzZXMiLCJsYXllclByb3BzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwidHlwZSIsImRhdGFJZCIsImlkIiwiaXNWaXNpYmxlIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwic3RhdGUiLCJwYXRjaCIsImRhdGFzZXRJZHNUb1BhdGNoIiwiaGFzRGVmaW5lZFBhdGNoVmFsdWUiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwiZGF0YXNldElkU2V0IiwiU2V0IiwibGF5ZXJzIiwiY29uZmlnIiwiaGFzIiwic2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsImFsbG93ZWRLZXlzIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwYXJ0aWFsIiwiYWNjIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJjYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGEiLCJpc1ZhbGlkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsImhhc0FsbENvbHVtbnMiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiZXJyb3JNZXNzYWdlIiwiZXJyIiwiQ29uc29sZSIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJCb29sZWFuIiwicmVuZGVyTGF5ZXIiLCJpc0xheWVyUmVuZGVyYWJsZSIsIkdFT0NPREVSX0xBWUVSX0lEIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc0xheWVyVmlzaWJsZSIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiYWNjdSIsIm92ZXJsYXlUeXBlIiwiT1ZFUkxBWV9UWVBFX0NPTlNUIiwiZGVja2dsIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiZ2V0Q3VzdG9tRGVja0xheWVycyIsImRlY2tHbFByb3BzIiwiYm90dG9tRGVja0xheWVycyIsImlzRnVuY3Rpb24iLCJ0b3BEZWNrTGF5ZXJzIiwidG9wTGF5ZXJzIiwiYmluZExheWVyQ2FsbGJhY2tzIiwidmFsIiwiY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlciIsImxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInJlbmRlclByb3BzIiwiaGFzU2hhZG93RWZmZWN0IiwiaXNBbm5vdGF0aW9uTW9kZSIsInJldmVyc2UiLCJvdmVybGF5cyIsImVsZW1lbnQiLCJpc1BsYWluT2JqZWN0IiwibGF5ZXJHcm91cCIsImxheWVySWQiLCJmaW5kSW5kZXgiLCJfcmVmMyIsImJpbmRlZExheWVyQ2FsbGJhY2tzIiwibGF5ZXJPdmVybGF5IiwiY29tcHV0ZURlY2tMYXllcnMiLCJfcmVmNCIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsIm1hcFN0eWxlIiwiZWZmZWN0cyIsInNwbGl0TWFwcyIsIl9yZWY1IiwibWFwSW5kZXgiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsInByaW1hcnlNYXAiLCJsYXllcnNGb3JEZWNrIiwiZWRpdG9ySW5mbyIsImRhdGFMYXllcnMiLCJlZmZlY3QiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJfcmVmNiIsInZpc2libGVMYXllckdyb3VwcyIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwicGlja2FibGUiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzIiwiX2dldEN1c3RvbURlY2tMYXllcnMyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY3VzdG9tQm90dG9tRGVja0xheWVycyIsImN1c3RvbVRvcERlY2tMYXllcnMiLCJlZGl0b3JMYXllciIsImdldEVkaXRvckxheWVyIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiX3JlZjciLCJnZXROZXdMYXllckdyb3VwIiwiX3Byb3BzJGlkIiwiX3Byb3BzJGxhYmVsIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRsYXllck9yZGVyIiwiX3Byb3BzJGlzSW5jbHVkZWRJbkxlIiwiZ2VuZXJhdGVIYXNoSWQiLCJsYWJlbCIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsImF0SW5kZXgiLCJzcGxpY2UiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJlbGVtZW50SWQiLCJuZXdMYXllck9yZGVyIiwiZW50cnkiLCJncm91cCIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVyR3JvdXBJZCIsImkiLCJncnAiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsIl9pdGVyYXRvciIsIl9zdGVwIiwibmVzdGVkIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibGF5ZXJFbnRyeUlkIiwiaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIiLCJmb3VuZCIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwib2xkRW50cnkiLCJuZXdFbnRyeSIsIm9sZEVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwibmV3TGF5ZXJHcm91cCIsImdldEZsYXRMYXllck9yZGVyIiwib3JkZXJFbnRyeSIsImJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeSIsInZhbGlkTGF5ZXJzIiwiZmluZCIsImwiLCJoaWRkZW4iLCJyZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIiLCJyZW9yZGVyTGF5ZXJPcmRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJhY3RpdmVJbmRleCIsIm92ZXJJbmRleCIsImFycmF5TW92ZSIsImFkZExheWVyVG9MYXllck9yZGVyIiwiZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZSIsImZpZWxkSW5kZXgiLCJEYXRhUm93IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIC8vIGluIHNwbGl0IG1vZGUgYSBsYXllciBtaXNzaW5nIGZyb20gbWFwTGF5ZXJzIGlzIGhpZGRlbiwgc28gY29lcmNlIHRvIGEgYm9vbGVhblxuICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdW5kZWZpbmVkIGludG8gZGVjay5nbCdzIHZpc2libGUgcHJvcFxuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCBCb29sZWFuKG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICByZXR1cm4gbGF5ZXIucmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgZ3B1RmlsdGVyLFxuICAgIGlkeDogbGF5ZXJJbmRleCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBtYXBTdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICB2aXNpYmxlLFxuICAgIGRhdGFzZXQsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyOiBMYXllciwgbGF5ZXJEYXRhKSB7XG4gIHJldHVybiBsYXllci5pZCAhPT0gR0VPQ09ERVJfTEFZRVJfSUQgJiYgbGF5ZXIuc2hvdWxkUmVuZGVyTGF5ZXIobGF5ZXJEYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpIHtcbiAgcmV0dXJuIChcbiAgICBsYXllci5jb25maWcuaXNWaXNpYmxlICYmXG4gICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgZG9uJ3QgcmVuZGVyIGl0XG4gICAgKCFtYXBMYXllcnMgfHwgKG1hcExheWVycyAmJiBtYXBMYXllcnNbbGF5ZXIuaWRdKSlcbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgbGF5ZXJzIHJlbmRlcmVkIGJ5IHRoZSBkZWNrLmdsXG4vLyBOb3RlLCBpc1Zpc2libGU6IGZhbHNlIGxheWVyIGlzIHBhc3NlZCB0byBkZWNrLmdsIGhlcmVcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzRm9yRGVjayhcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXVxuKToge1xuICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xufSB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06XG4gICAgICAgIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgbGF5ZXIub3ZlcmxheVR5cGUgPT09IE9WRVJMQVlfVFlQRV9DT05TVC5kZWNrZ2xcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiByZW5kZXJlZCBsYXllcnMgcmVuZGVyZWQgaW4gdGhlIG1hcFxuLy8gVGhpcyBpbmNsdWRlcyBvbmx5IHRoZSB2aXNpYmlsZSBsYXllcnMgZm9yIHNpbmdsZSBtYXAgdmlldyBhbmQgc3BsaXQgbWFwIHZpZXdcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIoXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBWaXNTdGF0ZVsnbGF5ZXJEYXRhJ10sXG4gIG1hcExheWVycz86IFNwbGl0TWFwTGF5ZXJzIHwgdW5kZWZpbmVkIHwgbnVsbFxuKTogTGF5ZXJzVG9SZW5kZXIge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOiBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxudHlwZSBDdXN0b21EZWNrTGF5ZXIgPSBEZWNrTGF5ZXI8RGVja0xheWVyUHJvcHM+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcz86IGFueSk6IFtDdXN0b21EZWNrTGF5ZXJbXSwgQ3VzdG9tRGVja0xheWVyW11dIHtcbiAgY29uc3QgYm90dG9tRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnMoKVxuICAgIDogW107XG4gIGNvbnN0IHRvcERlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKClcbiAgICA6IFtdO1xuXG4gIHJldHVybiBbYm90dG9tRGVja0xheWVycywgdG9wRGVja0xheWVyc107XG59XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMgPSB7XG4gIG1hcEluZGV4PzogbnVtYmVyO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBwcmltYXJ5TWFwPzogYm9vbGVhbjtcbiAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIGxheWVyc0ZvckRlY2s/OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gIGVkaXRvckluZm8/OiB7XG4gICAgZWRpdG9yOiBFZGl0b3I7XG4gICAgZWRpdG9yTWVudUFjdGl2ZTogYm9vbGVhbjtcbiAgICBvblNldEZlYXR1cmVzOiAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gYW55O1xuICAgIHNldFNlbGVjdGVkRmVhdHVyZTogKFxuICAgICAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGwsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0PzogRmVhdHVyZVNlbGVjdGlvbkNvbnRleHRcbiAgICApID0+IGFueTtcbiAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbD86IChmZWF0dXJlOiBGZWF0dXJlKSA9PiBhbnk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW107XG4gICAgfTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiBudW1iZXJbXTtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZExheWVyQ2FsbGJhY2tzKFxuICBsYXllckNhbGxiYWNrczogTGF5ZXJDYWxsYmFja3MgPSB7fSxcbiAgaWR4OiBudW1iZXJcbik6IEJpbmRlZExheWVyQ2FsbGJhY2tzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyQ2FsbGJhY2tzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBba2V5XTogdmFsID0+IGxheWVyQ2FsbGJhY2tzW2tleV0oaWR4LCB2YWwpXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgKHZhbDogdW5rbm93bikgPT4gdm9pZD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IGFueVtdLFxuICBjdXJyZW50TGF5ZXJzRm9yRGVjazoge1trZXk6IHN0cmluZ106IGJvb2xlYW59LFxuICByZW5kZXJQcm9wczoge1xuICAgIGRhdGFzZXRzOiBhbnk7XG4gICAgaG92ZXJJbmZvOiBhbnk7XG4gICAgY2xpY2tlZDogYW55O1xuICAgIG1hcFN0YXRlOiBhbnk7XG4gICAgaW50ZXJhY3Rpb25Db25maWc6IGFueTtcbiAgICBhbmltYXRpb25Db25maWc6IGFueTtcbiAgICBtYXBMYXllcnM6IGFueTtcbiAgICBoYXNTaGFkb3dFZmZlY3Q6IGJvb2xlYW47XG4gICAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIH0sXG4gIGxheWVyQ2FsbGJhY2tzPzogYW55XG4pOiBhbnlbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSByZW5kZXJQcm9wcztcbiAgcmV0dXJuIGxheWVyT3JkZXJcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGVsZW1lbnQgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgIGxheWVyR3JvdXAubGF5ZXJPcmRlcixcbiAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgIGN1cnJlbnRMYXllcnNGb3JEZWNrLFxuICAgICAgICAgICAgcmVuZGVyUHJvcHMsXG4gICAgICAgICAgICBsYXllckNhbGxiYWNrc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgIGlmIChsYXllckluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgKTtcbiAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQobGF5ZXJPdmVybGF5IHx8IFtdKTtcbiAgICB9LCBbXSBhcyBhbnlbXSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnMoXG4gIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTogYW55LFxuICBvcHRpb25zPzogQ29tcHV0ZURlY2tMYXllcnNQcm9wcyxcbiAgbGF5ZXJDYWxsYmFja3M/OiBMYXllckNhbGxiYWNrcyxcbiAgZGVja0dsUHJvcHM/OiBhbnlcbik6IExheWVyW10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgZWZmZWN0cyxcbiAgICBsYXllcnMsXG4gICAgbGF5ZXJPcmRlcixcbiAgICBsYXllckRhdGEsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIHNwbGl0TWFwc1xuICB9ID0gdmlzU3RhdGU7XG5cbiAgY29uc3Qge1xuICAgIG1hcEluZGV4LFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybCxcbiAgICBwcmltYXJ5TWFwLFxuICAgIGxheWVyc0ZvckRlY2ssXG4gICAgZWRpdG9ySW5mbyxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkYXRhTGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0IGhhc1NoYWRvd0VmZmVjdCA9IGVmZmVjdHMuc29tZShlZmZlY3QgPT4ge1xuICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZTtcbiAgfSk7XG5cbiAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgY29uc3QgbWFwTGF5ZXJzID0gZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyhzcGxpdE1hcHMsIG1hcEluZGV4IHx8IDApO1xuXG4gICAgY29uc3QgY3VycmVudExheWVyc0ZvckRlY2sgPSBsYXllcnNGb3JEZWNrIHx8IHByZXBhcmVMYXllcnNGb3JEZWNrKGxheWVycywgbGF5ZXJEYXRhKTtcblxuICAgIGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgob3ZlcmxheXMsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgICAgaWYgKCFsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KFxuICAgICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgaWYgKCFwcmltYXJ5TWFwKSB7XG4gICAgcmV0dXJuIGRhdGFMYXllcnM7XG4gIH1cblxuICBpZiAoXG4gICAgbWFwU3R5bGU/LnZpc2libGVMYXllckdyb3Vwc1snM2QgYnVpbGRpbmcnXSAmJlxuICAgIHByaW1hcnlNYXAgJiZcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiAmJlxuICAgIG1hcGJveEFwaVVybFxuICApIHtcbiAgICBkYXRhTGF5ZXJzLnB1c2goXG4gICAgICBuZXcgVGhyZWVEQnVpbGRpbmdMYXllcih7XG4gICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgcGlja2FibGU6IEJvb2xlYW4oaXNBbm5vdGF0aW9uTW9kZSksXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtjdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCBjdXN0b21Ub3BEZWNrTGF5ZXJzXSA9IGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHMpO1xuXG4gIGNvbnN0IGVkaXRvckxheWVyOiBhbnlbXSA9IFtdO1xuICBpZiAoZWRpdG9ySW5mbykge1xuICAgIGVkaXRvckxheWVyLnB1c2goXG4gICAgICBnZXRFZGl0b3JMYXllcih7XG4gICAgICAgIC4uLmVkaXRvckluZm8sXG4gICAgICAgIG1hcFN0YXRlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gWy4uLmN1c3RvbUJvdHRvbURlY2tMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmN1c3RvbVRvcERlY2tMYXllcnMsIC4uLmVkaXRvckxheWVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzPFQgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGxheWVyczogVFtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gbGF5ZXJzLm1hcCgoe2lkfSkgPT4gaWQpO1xufVxuXG4vLyAtLS0gTGF5ZXIgR3JvdXAgVXRpbGl0aWVzIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TGF5ZXJHcm91cChwcm9wcz86IFBhcnRpYWw8TGF5ZXJPcmRlckdyb3VwPik6IExheWVyT3JkZXJHcm91cCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHByb3BzPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogcHJvcHM/LmxhYmVsID8/ICdOZXcgZ3JvdXAnLFxuICAgIGlzVmlzaWJsZTogcHJvcHM/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGxheWVyT3JkZXI6IHByb3BzPy5sYXllck9yZGVyID8/IFtdLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogcHJvcHM/LmlzSW5jbHVkZWRJbkxlZ2VuZCA/PyB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeSxcbiAgYXRJbmRleD86IG51bWJlclxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IGlkeCA9IGF0SW5kZXggPz8gMDtcbiAgY29uc3QgcmVzdWx0ID0gWy4uLmxheWVyT3JkZXJdO1xuICByZXN1bHQuc3BsaWNlKGlkeCwgMCwgZWxlbWVudCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGlmICghbGF5ZXJPcmRlcikgcmV0dXJuIFtdO1xuICBjb25zdCBlbGVtZW50SWQgPSB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogZWxlbWVudC5pZDtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBsYXllck9yZGVyLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXR1cm4gKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkuaWQgIT09IGVsZW1lbnRJZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5ICE9PSBlbGVtZW50SWQ7XG4gIH0pO1xuXG4gIG5ld0xheWVyT3JkZXIgPSBuZXdMYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlciwgZWxlbWVudElkKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gbmV3TGF5ZXJPcmRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJHcm91cElkOiBzdHJpbmdcbik6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGxldCBncm91cDogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyT3JkZXIubGVuZ3RoICYmICFncm91cDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBsYXllck9yZGVyW2ldO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgZ3JvdXAgPVxuICAgICAgICBncnAuaWQgPT09IGxheWVyR3JvdXBJZCA/IGdycCA6IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsVUFBQSxHQUFBRCxPQUFB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Q0YsQ0FBQyxNQUFNO01BQ0wsSUFBTUssR0FBRyxHQUFHTCxLQUF3QjtNQUNwQyxJQUFJSyxHQUFHLENBQUN0RSxVQUFVLEVBQUU7UUFDbEJyRSxHQUFHLENBQUNqRCxJQUFJLENBQUFFLGFBQUEsQ0FBQUEsYUFBQSxLQUNIMEwsR0FBRztVQUNOdEUsVUFBVSxFQUFFNEYsOEJBQThCLENBQUN0QixHQUFHLENBQUN0RSxVQUFVLEVBQUU5RSxNQUFNO1FBQUMsRUFDbkUsQ0FBQztNQUNKO0lBQ0Y7SUFDQSxPQUFPUyxHQUFHO0VBQ1osQ0FBQyxFQUFFLEVBQWdCLENBQUM7QUFDdEI7QUFFTyxTQUFTa0ssaUJBQWlCQSxDQUMvQjdGLFVBQWtDLEVBQ2xDOEYsYUFBcUIsRUFDckJDLGtCQUEwQixFQUNGO0VBQ3hCLElBQU1DLFdBQVcsR0FBR3JCLHdCQUF3QixDQUFDM0UsVUFBVSxFQUFFOEYsYUFBYSxDQUFDO0VBQ3ZFLElBQU1HLFNBQVMsR0FBR3RCLHdCQUF3QixDQUFDM0UsVUFBVSxFQUFFK0Ysa0JBQWtCLENBQUM7RUFFMUUsSUFBSUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT2pHLFVBQVU7RUFDbkI7RUFDQSxPQUFPLElBQUFrRyxzQkFBUyxFQUFDbEcsVUFBVSxFQUFFZ0csV0FBVyxFQUFFQyxTQUFTLENBQUM7QUFDdEQ7QUFFTyxTQUFTRSxvQkFBb0JBLENBQ2xDbkcsVUFBa0MsRUFDbENVLE9BQWUsRUFDSDtFQUNaLFFBQVFBLE9BQU8sRUFBQTVHLE1BQUEsS0FBQWlKLG1CQUFBLGFBQUsvQyxVQUFVO0FBQ2hDO0FBRU8sU0FBU29HLHNCQUFzQkEsQ0FDcEN2SSxJQUFvRSxFQUNwRXdJLFVBQWtCLEVBQ2xCO0VBQ0EsSUFBSSxDQUFDeEksSUFBSSxFQUFFLE9BQU85QyxTQUFTO0VBQzNCLElBQUk4QyxJQUFJLFlBQVl5SSxjQUFPLEVBQUUsT0FBT3pJLElBQUksQ0FBQzBJLE9BQU8sQ0FBQ0YsVUFBVSxDQUFDO0VBQzVELE9BQU94SSxJQUFJLENBQUN3SSxVQUFVLENBQUM7QUFDekI7O0FBRUE7QUFDTyxTQUFTRyx1QkFBdUJBLENBQUN0TCxNQUFtQixFQUFXO0VBQ3BFLE9BQU9BLE1BQU0sQ0FBQ0wsSUFBSTtFQUNoQjtFQUNBLFVBQUFSLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNvTSxhQUFhLElBQUksQ0FBQ3BNLEtBQUssQ0FBQ3FNLFFBQVE7RUFBQSxDQUNqRCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
769
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbnN0YW50cyIsIl9sYXllcnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9kZWNrZ2xMYXllcnMiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImxjIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwicHJvcHMiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIm1hcCIsInAiLCJ0eXBlIiwiZGF0YUlkIiwiaWQiLCJpc1Zpc2libGUiLCJsYXllciIsInNldEluaXRpYWxMYXllckNvbmZpZyIsImRhdGFDb250YWluZXIiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJzdGF0ZSIsInBhdGNoIiwiZGF0YXNldElkc1RvUGF0Y2giLCJoYXNEZWZpbmVkUGF0Y2hWYWx1ZSIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJkYXRhc2V0SWRTZXQiLCJTZXQiLCJsYXllcnMiLCJjb25maWciLCJoYXMiLCJzZXR0aW5ncyIsInZpc0NvbmZpZ1NldHRpbmdzIiwiYWxsb3dlZEtleXMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhcnRpYWwiLCJhY2MiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsImxheWVyRGF0YSIsImlzVmFsaWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiaGFzQWxsQ29sdW1ucyIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwidXBkYXRlTGF5ZXJDb25maWciLCJlcnJvck1lc3NhZ2UiLCJlcnIiLCJDb25zb2xlIiwiZXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdWJzdHJpbmciLCJnZXRMYXllckhvdmVyUHJvcCIsIl9yZWYiLCJhbmltYXRpb25Db25maWciLCJpbnRlcmFjdGlvbkNvbmZpZyIsImhvdmVySW5mbyIsImxheWVyc1RvUmVuZGVyIiwidG9vbHRpcCIsImVuYWJsZWQiLCJwaWNrZWQiLCJvYmplY3QiLCJvdmVybGF5IiwiaWR4IiwiaW5kZXgiLCJnZXRIb3ZlckRhdGEiLCJfZGF0YXNldHMkZGF0YUlkIiwiZmllbGRzIiwiZGF0YSIsImZpZWxkc1RvU2hvdyIsImN1cnJlbnRUaW1lIiwidGltZXpvbmUiLCJaT09NX09QQUNJVFlfUFJPUF9LRVlTIiwic2NhbGVab29tT3BhY2l0eVN1YkxheWVyUHJvcHMiLCJzdWJMYXllclByb3BzIiwiZmFjdG9yIiwiY2hhbmdlZCIsIl9pIiwiX09iamVjdCRrZXlzIiwic3VibGF5ZXIiLCJfdHlwZW9mMiIsInNjYWxlZCIsInN1YmxheWVyQ2hhbmdlZCIsIl9pdGVyYXRvciIsIl9zdGVwIiwiYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyIiwiZGVja0xheWVyIiwiX2RlY2tMYXllciRwcm9wcyIsIl9kZWNrTGF5ZXIkcHJvcHMyIiwiX2RlY2tMYXllciRwcm9wczMiLCJjbG9uZSIsImJhc2VPcGFjaXR5Iiwib3BhY2l0eSIsIl9zdWJMYXllclByb3BzIiwidmlzaWJsZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsIkJvb2xlYW4iLCJyZW5kZXJlZCIsInJlbmRlckxheWVyIiwiZ2V0TGF5ZXJab29tT3BhY2l0eUZhY3RvciIsInpvb20iLCJpc0xheWVyUmVuZGVyYWJsZSIsIkdFT0NPREVSX0xBWUVSX0lEIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc0xheWVyVmlzaWJsZSIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiYWNjdSIsIm92ZXJsYXlUeXBlIiwiT1ZFUkxBWV9UWVBFX0NPTlNUIiwiZGVja2dsIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiZ2V0Q3VzdG9tRGVja0xheWVycyIsImRlY2tHbFByb3BzIiwiYm90dG9tRGVja0xheWVycyIsImlzRnVuY3Rpb24iLCJ0b3BEZWNrTGF5ZXJzIiwidG9wTGF5ZXJzIiwiYmluZExheWVyQ2FsbGJhY2tzIiwidmFsIiwiY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlciIsImxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInJlbmRlclByb3BzIiwiaGFzU2hhZG93RWZmZWN0IiwiaXNBbm5vdGF0aW9uTW9kZSIsInJldmVyc2UiLCJvdmVybGF5cyIsImVsZW1lbnQiLCJpc1BsYWluT2JqZWN0IiwibGF5ZXJHcm91cCIsImxheWVySWQiLCJmaW5kSW5kZXgiLCJfcmVmMyIsImJpbmRlZExheWVyQ2FsbGJhY2tzIiwibGF5ZXJPdmVybGF5IiwiY29tcHV0ZURlY2tMYXllcnMiLCJfcmVmNCIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsIm1hcFN0eWxlIiwiZWZmZWN0cyIsInNwbGl0TWFwcyIsIl9yZWY1IiwibWFwSW5kZXgiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsInByaW1hcnlNYXAiLCJsYXllcnNGb3JEZWNrIiwiZWRpdG9ySW5mbyIsImRhdGFMYXllcnMiLCJlZmZlY3QiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJfcmVmNiIsInZpc2libGVMYXllckdyb3VwcyIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwicGlja2FibGUiLCJ1cGRhdGVUcmlnZ2VycyIsImdldEZpbGxDb2xvciIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzIiwiX2dldEN1c3RvbURlY2tMYXllcnMyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY3VzdG9tQm90dG9tRGVja0xheWVycyIsImN1c3RvbVRvcERlY2tMYXllcnMiLCJlZGl0b3JMYXllciIsImdldEVkaXRvckxheWVyIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiX3JlZjciLCJnZXROZXdMYXllckdyb3VwIiwiX3Byb3BzJGlkIiwiX3Byb3BzJGxhYmVsIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRsYXllck9yZGVyIiwiX3Byb3BzJGlzSW5jbHVkZWRJbkxlIiwiZ2VuZXJhdGVIYXNoSWQiLCJsYWJlbCIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsImF0SW5kZXgiLCJzcGxpY2UiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJlbGVtZW50SWQiLCJuZXdMYXllck9yZGVyIiwiZW50cnkiLCJncm91cCIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVyR3JvdXBJZCIsImkiLCJncnAiLCJnZXRBbmNlc3RvckxheWVyR3JvdXBzIiwiZW50cnlJZCIsImFuY2VzdG9ycyIsInZpc2l0IiwiZW50cmllcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpc0xheWVyU2hvd25JbkxlZ2VuZCIsImV2ZXJ5IiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibmVzdGVkIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibGF5ZXJFbnRyeUlkIiwiaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIiLCJmb3VuZCIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwib2xkRW50cnkiLCJuZXdFbnRyeSIsIm9sZEVudHJ5SWQiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwibmV3TGF5ZXJHcm91cCIsImdldEZsYXRMYXllck9yZGVyIiwib3JkZXJFbnRyeSIsImJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeSIsInZhbGlkTGF5ZXJzIiwiZmluZCIsImwiLCJoaWRkZW4iLCJyZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIiLCJyZW9yZGVyTGF5ZXJPcmRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJhY3RpdmVJbmRleCIsIm92ZXJJbmRleCIsImFycmF5TW92ZSIsImFkZExheWVyVG9MYXllck9yZGVyIiwiZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZSIsImZpZWxkSW5kZXgiLCJEYXRhUm93IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge2dldExheWVyWm9vbU9wYWNpdHlGYWN0b3J9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuXG5pbXBvcnQge1RocmVlREJ1aWxkaW5nTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIExheWVyc1RvUmVuZGVyID0ge1xuICBbbGF5ZXJJZDogc3RyaW5nXTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgPSB7XG4gIHBvaW50czogYW55W107XG4gIGNvbG9yVmFsdWU/OiBhbnk7XG4gIGVsZXZhdGlvblZhbHVlPzogYW55O1xuICBhZ2dyZWdhdGVkRGF0YT86IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgbWVhc3VyZTogc3RyaW5nO1xuICAgICAgdmFsdWU/OiBhbnk7XG4gICAgfVxuICA+O1xufTtcblxuZXhwb3J0IHR5cGUgTGF5ZXJIb3ZlclByb3AgPSB7XG4gIGRhdGE6IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGZpZWxkc1RvU2hvdzogVG9vbHRpcEZpZWxkW107XG4gIGxheWVyOiBMYXllcjtcbiAgcHJpbWFyeURhdGE/OiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IGFueVtdIHwgbnVsbDtcbiAgY29tcGFyZVR5cGU/OiBDb21wYXJlVHlwZTtcbiAgY3VycmVudFRpbWU/OiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ11bJ2N1cnJlbnRUaW1lJ107XG4gIHRpbWV6b25lPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSxcbiAgICAgICAgdGltZXpvbmU6IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLnRpbWV6b25lXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBaT09NX09QQUNJVFlfUFJPUF9LRVlTID0gWydvcGFjaXR5JywgJ2xpbmVPcGFjaXR5JywgJ3N0cm9rZU9wYWNpdHknXTtcblxuLyoqIFN0cm9rZSBhbmQgb3V0bGluZSBwcm9wcyByZXBsYWNlIHRoZSBwYXJlbnQgb3BhY2l0eSwgc28gdGhleSBuZWVkIHRoZSBzYW1lIGZhY3Rvci4gKi9cbmZ1bmN0aW9uIHNjYWxlWm9vbU9wYWNpdHlTdWJMYXllclByb3BzKFxuICBzdWJMYXllclByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkLFxuICBmYWN0b3I6IG51bWJlclxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmICghc3ViTGF5ZXJQcm9wcykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgY29uc3QgbmV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHN1YkxheWVyUHJvcHMpKSB7XG4gICAgY29uc3Qgc3VibGF5ZXIgPSBzdWJMYXllclByb3BzW2lkXTtcbiAgICBpZiAoIXN1YmxheWVyIHx8IHR5cGVvZiBzdWJsYXllciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIG5leHRbaWRdID0gc3VibGF5ZXI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVkID0gey4uLnN1YmxheWVyfTtcbiAgICBsZXQgc3VibGF5ZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgWk9PTV9PUEFDSVRZX1BST1BfS0VZUykge1xuICAgICAgaWYgKHR5cGVvZiBzdWJsYXllcltrZXldID09PSAnbnVtYmVyJykge1xuICAgICAgICBzY2FsZWRba2V5XSA9IHN1YmxheWVyW2tleV0gKiBmYWN0b3I7XG4gICAgICAgIHN1YmxheWVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIG5leHRbaWRdID0gc3VibGF5ZXJDaGFuZ2VkID8gc2NhbGVkIDogc3VibGF5ZXI7XG4gICAgaWYgKHN1YmxheWVyQ2hhbmdlZCkge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKGRlY2tMYXllcjogYW55LCBmYWN0b3I6IG51bWJlcik6IGFueSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRlY2tMYXllcikpIHtcbiAgICByZXR1cm4gZGVja0xheWVyLm1hcChsYXllciA9PiBhcHBseVpvb21PcGFjaXR5VG9EZWNrTGF5ZXIobGF5ZXIsIGZhY3RvcikpO1xuICB9XG4gIGlmICghZGVja0xheWVyIHx8IGZhY3RvciA9PT0gMSB8fCB0eXBlb2YgZGVja0xheWVyLmNsb25lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRlY2tMYXllcjtcbiAgfVxuICBjb25zdCBiYXNlT3BhY2l0eSA9IGRlY2tMYXllci5wcm9wcz8ub3BhY2l0eTtcbiAgY29uc3Qgb3BhY2l0eSA9ICh0eXBlb2YgYmFzZU9wYWNpdHkgPT09ICdudW1iZXInID8gYmFzZU9wYWNpdHkgOiAxKSAqIGZhY3RvcjtcbiAgY29uc3Qgc3ViTGF5ZXJQcm9wcyA9IHNjYWxlWm9vbU9wYWNpdHlTdWJMYXllclByb3BzKGRlY2tMYXllci5wcm9wcz8uX3N1YkxheWVyUHJvcHMsIGZhY3Rvcik7XG4gIHJldHVybiBkZWNrTGF5ZXIuY2xvbmUoe1xuICAgIG9wYWNpdHksXG4gICAgLy8gRnVsbHkgZmFkZWQgbGF5ZXJzIGFyZSBub3QgcGlja2FibGUuXG4gICAgdmlzaWJsZTogZGVja0xheWVyLnByb3BzPy52aXNpYmxlICE9PSBmYWxzZSAmJiBmYWN0b3IgPiAwLFxuICAgIC4uLihzdWJMYXllclByb3BzID8ge19zdWJMYXllclByb3BzOiBzdWJMYXllclByb3BzfSA6IHt9KVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIC8vIGluIHNwbGl0IG1vZGUgYSBsYXllciBtaXNzaW5nIGZyb20gbWFwTGF5ZXJzIGlzIGhpZGRlbiwgc28gY29lcmNlIHRvIGEgYm9vbGVhblxuICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdW5kZWZpbmVkIGludG8gZGVjay5nbCdzIHZpc2libGUgcHJvcFxuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCBCb29sZWFuKG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICBjb25zdCByZW5kZXJlZCA9IGxheWVyLnJlbmRlckxheWVyKHtcbiAgICBkYXRhLFxuICAgIGdwdUZpbHRlcixcbiAgICBpZHg6IGxheWVySW5kZXgsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgbGF5ZXJDYWxsYmFja3MsXG4gICAgbWFwU3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIG9iamVjdEhvdmVyZWQsXG4gICAgdmlzaWJsZSxcbiAgICBkYXRhc2V0LFxuICAgIGV4cGVyaW1lbnRhbENvbnRleHRcbiAgfSk7XG4gIGNvbnN0IGZhY3RvciA9IGdldExheWVyWm9vbU9wYWNpdHlGYWN0b3IobGF5ZXIuaWQsIG1hcFN0YXRlPy56b29tLCBpbnRlcmFjdGlvbkNvbmZpZyk7XG4gIHJldHVybiBhcHBseVpvb21PcGFjaXR5VG9EZWNrTGF5ZXIocmVuZGVyZWQsIGZhY3Rvcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUmVuZGVyYWJsZShsYXllcjogTGF5ZXIsIGxheWVyRGF0YSkge1xuICByZXR1cm4gbGF5ZXIuaWQgIT09IEdFT0NPREVSX0xBWUVSX0lEICYmIGxheWVyLnNob3VsZFJlbmRlckxheWVyKGxheWVyRGF0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyVmlzaWJsZShsYXllciwgbWFwTGF5ZXJzKSB7XG4gIHJldHVybiAoXG4gICAgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZSAmJlxuICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGRvbid0IHJlbmRlciBpdFxuICAgICghbWFwTGF5ZXJzIHx8IChtYXBMYXllcnMgJiYgbWFwTGF5ZXJzW2xheWVyLmlkXSkpXG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIGxheWVycyByZW5kZXJlZCBieSB0aGUgZGVjay5nbFxuLy8gTm90ZSwgaXNWaXNpYmxlOiBmYWxzZSBsYXllciBpcyBwYXNzZWQgdG8gZGVjay5nbCBoZXJlXG4vLyByZXR1cm4ge1tpZF06IHRydWUgXFwgZmFsc2V9XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUxheWVyc0ZvckRlY2soXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBWaXNTdGF0ZVsnbGF5ZXJEYXRhJ11cbik6IHtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn0ge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOlxuICAgICAgICBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGxheWVyLm92ZXJsYXlUeXBlID09PSBPVkVSTEFZX1RZUEVfQ09OU1QuZGVja2dsXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgcmVuZGVyZWQgbGF5ZXJzIHJlbmRlcmVkIGluIHRoZSBtYXBcbi8vIFRoaXMgaW5jbHVkZXMgb25seSB0aGUgdmlzaWJpbGUgbGF5ZXJzIGZvciBzaW5nbGUgbWFwIHZpZXcgYW5kIHNwbGl0IG1hcCB2aWV3XG4vLyByZXR1cm4ge1tpZF06IHRydWUgXFwgZmFsc2V9XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUxheWVyc1RvUmVuZGVyKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddLFxuICBtYXBMYXllcnM/OiBTcGxpdE1hcExheWVycyB8IHVuZGVmaW5lZCB8IG51bGxcbik6IExheWVyc1RvUmVuZGVyIHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTogaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBpc0xheWVyVmlzaWJsZShsYXllciwgbWFwTGF5ZXJzKVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbnR5cGUgQ3VzdG9tRGVja0xheWVyID0gRGVja0xheWVyPERlY2tMYXllclByb3BzPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHM/OiBhbnkpOiBbQ3VzdG9tRGVja0xheWVyW10sIEN1c3RvbURlY2tMYXllcltdXSB7XG4gIGNvbnN0IGJvdHRvbURlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy5sYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8ubGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy5sYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8ubGF5ZXJzKClcbiAgICA6IFtdO1xuICBjb25zdCB0b3BEZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LnRvcExheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LnRvcExheWVycygpXG4gICAgOiBbXTtcblxuICByZXR1cm4gW2JvdHRvbURlY2tMYXllcnMsIHRvcERlY2tMYXllcnNdO1xufVxuXG5leHBvcnQgdHlwZSBDb21wdXRlRGVja0xheWVyc1Byb3BzID0ge1xuICBtYXBJbmRleD86IG51bWJlcjtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgcHJpbWFyeU1hcD86IGJvb2xlYW47XG4gIGlzQW5ub3RhdGlvbk1vZGU/OiBib29sZWFuO1xuICBsYXllcnNGb3JEZWNrPzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59O1xuICBlZGl0b3JJbmZvPzoge1xuICAgIGVkaXRvcjogRWRpdG9yO1xuICAgIGVkaXRvck1lbnVBY3RpdmU6IGJvb2xlYW47XG4gICAgb25TZXRGZWF0dXJlczogKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IGFueTtcbiAgICBzZXRTZWxlY3RlZEZlYXR1cmU6IChcbiAgICAgIGZlYXR1cmU6IEZlYXR1cmUgfCBudWxsLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dD86IEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0XG4gICAgKSA9PiBhbnk7XG4gICAgb25BcHBseVBvbHlnb25GaWx0ZXJBbGw/OiAoZmVhdHVyZTogRmVhdHVyZSkgPT4gYW55O1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBmZWF0dXJlczogRmVhdHVyZVtdO1xuICAgIH07XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogbnVtYmVyW107XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRMYXllckNhbGxiYWNrcyhcbiAgbGF5ZXJDYWxsYmFja3M6IExheWVyQ2FsbGJhY2tzID0ge30sXG4gIGlkeDogbnVtYmVyXG4pOiBCaW5kZWRMYXllckNhbGxiYWNrcyB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhsYXllckNhbGxiYWNrcykucmVkdWNlKFxuICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2tleV06IHZhbCA9PiBsYXllckNhbGxiYWNrc1trZXldKGlkeCwgdmFsKVxuICAgIH0pLFxuICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsICh2YWw6IHVua25vd24pID0+IHZvaWQ+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBhbnlbXSxcbiAgY3VycmVudExheWVyc0ZvckRlY2s6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSxcbiAgcmVuZGVyUHJvcHM6IHtcbiAgICBkYXRhc2V0czogYW55O1xuICAgIGhvdmVySW5mbzogYW55O1xuICAgIGNsaWNrZWQ6IGFueTtcbiAgICBtYXBTdGF0ZTogYW55O1xuICAgIGludGVyYWN0aW9uQ29uZmlnOiBhbnk7XG4gICAgYW5pbWF0aW9uQ29uZmlnOiBhbnk7XG4gICAgbWFwTGF5ZXJzOiBhbnk7XG4gICAgaGFzU2hhZG93RWZmZWN0OiBib29sZWFuO1xuICAgIGlzQW5ub3RhdGlvbk1vZGU/OiBib29sZWFuO1xuICB9LFxuICBsYXllckNhbGxiYWNrcz86IGFueVxuKTogYW55W10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgbWFwU3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIG1hcExheWVycyxcbiAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgaXNBbm5vdGF0aW9uTW9kZVxuICB9ID0gcmVuZGVyUHJvcHM7XG4gIHJldHVybiBsYXllck9yZGVyXG4gICAgLnNsaWNlKClcbiAgICAucmV2ZXJzZSgpXG4gICAgLnJlZHVjZSgob3ZlcmxheXMsIGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgaWYgKCFsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KFxuICAgICAgICAgIGNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIoXG4gICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgICBsYXllckRhdGEsXG4gICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgIHJlbmRlclByb3BzLFxuICAgICAgICAgICAgbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICBpZiAoIWN1cnJlbnRMYXllcnNGb3JEZWNrW2xheWVySWRdKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVySW5kZXggPSBsYXllcnMuZmluZEluZGV4KCh7aWR9KSA9PiBpZCA9PT0gbGF5ZXJJZCk7XG4gICAgICBpZiAobGF5ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgfVxuICAgICAgY29uc3QgYmluZGVkTGF5ZXJDYWxsYmFja3MgPSBsYXllckNhbGxiYWNrc1xuICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2xheWVySW5kZXhdO1xuICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJJbmRleCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgZXhwZXJpbWVudGFsQ29udGV4dDoge1xuICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICk7XG4gICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgfSwgW10gYXMgYW55W10pO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVEZWNrTGF5ZXJzKFxuICB7dmlzU3RhdGUsIG1hcFN0YXRlLCBtYXBTdHlsZX06IGFueSxcbiAgb3B0aW9ucz86IENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMsXG4gIGxheWVyQ2FsbGJhY2tzPzogTGF5ZXJDYWxsYmFja3MsXG4gIGRlY2tHbFByb3BzPzogYW55XG4pOiBMYXllcltdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGVmZmVjdHMsXG4gICAgbGF5ZXJzLFxuICAgIGxheWVyT3JkZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzcGxpdE1hcHNcbiAgfSA9IHZpc1N0YXRlO1xuXG4gIGNvbnN0IHtcbiAgICBtYXBJbmRleCxcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmwsXG4gICAgcHJpbWFyeU1hcCxcbiAgICBsYXllcnNGb3JEZWNrLFxuICAgIGVkaXRvckluZm8sXG4gICAgaXNBbm5vdGF0aW9uTW9kZVxuICB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgZGF0YUxheWVyczogYW55W10gPSBbXTtcblxuICBjb25zdCBoYXNTaGFkb3dFZmZlY3QgPSBlZmZlY3RzLnNvbWUoZWZmZWN0ID0+IHtcbiAgICByZXR1cm4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGU7XG4gIH0pO1xuXG4gIGlmIChsYXllckRhdGEgJiYgbGF5ZXJEYXRhLmxlbmd0aCkge1xuICAgIGNvbnN0IG1hcExheWVycyA9IGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMoc3BsaXRNYXBzLCBtYXBJbmRleCB8fCAwKTtcblxuICAgIGNvbnN0IGN1cnJlbnRMYXllcnNGb3JEZWNrID0gbGF5ZXJzRm9yRGVjayB8fCBwcmVwYXJlTGF5ZXJzRm9yRGVjayhsYXllcnMsIGxheWVyRGF0YSk7XG5cbiAgICBkYXRhTGF5ZXJzID0gbGF5ZXJPcmRlclxuICAgICAgLnNsaWNlKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGVsZW1lbnQgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICAgIGNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIoXG4gICAgICAgICAgICAgIGxheWVyR3JvdXAubGF5ZXJPcmRlcixcbiAgICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgICBsYXllckRhdGEsXG4gICAgICAgICAgICAgIGN1cnJlbnRMYXllcnNGb3JEZWNrLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsYXllckNhbGxiYWNrc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgICBpZiAoIWN1cnJlbnRMYXllcnNGb3JEZWNrW2xheWVySWRdKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheWVySW5kZXggPSBsYXllcnMuZmluZEluZGV4KCh7aWR9KSA9PiBpZCA9PT0gbGF5ZXJJZCk7XG4gICAgICAgIGlmIChsYXllckluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgZXhwZXJpbWVudGFsQ29udGV4dDoge1xuICAgICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGJpbmRlZExheWVyQ2FsbGJhY2tzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQobGF5ZXJPdmVybGF5IHx8IFtdKTtcbiAgICAgIH0sIFtdKTtcbiAgfVxuXG4gIGlmICghcHJpbWFyeU1hcCkge1xuICAgIHJldHVybiBkYXRhTGF5ZXJzO1xuICB9XG5cbiAgaWYgKFxuICAgIG1hcFN0eWxlPy52aXNpYmxlTGF5ZXJHcm91cHNbJzNkIGJ1aWxkaW5nJ10gJiZcbiAgICBwcmltYXJ5TWFwICYmXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4gJiZcbiAgICBtYXBib3hBcGlVcmxcbiAgKSB7XG4gICAgZGF0YUxheWVycy5wdXNoKFxuICAgICAgbmV3IFRocmVlREJ1aWxkaW5nTGF5ZXIoe1xuICAgICAgICBpZDogJ19rZXBsZXJnbF8zZC1idWlsZGluZycsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIHRocmVlREJ1aWxkaW5nQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3IsXG4gICAgICAgIHBpY2thYmxlOiBCb29sZWFuKGlzQW5ub3RhdGlvbk1vZGUpLFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgIGdldEZpbGxDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvclxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjb25zdCBbY3VzdG9tQm90dG9tRGVja0xheWVycywgY3VzdG9tVG9wRGVja0xheWVyc10gPSBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzKTtcblxuICBjb25zdCBlZGl0b3JMYXllcjogYW55W10gPSBbXTtcbiAgaWYgKGVkaXRvckluZm8pIHtcbiAgICBlZGl0b3JMYXllci5wdXNoKFxuICAgICAgZ2V0RWRpdG9yTGF5ZXIoe1xuICAgICAgICAuLi5lZGl0b3JJbmZvLFxuICAgICAgICBtYXBTdGF0ZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5jdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCAuLi5kYXRhTGF5ZXJzLCAuLi5jdXN0b21Ub3BEZWNrTGF5ZXJzLCAuLi5lZGl0b3JMYXllcl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllck9yZGVyRnJvbUxheWVyczxUIGV4dGVuZHMge2lkOiBzdHJpbmd9PihsYXllcnM6IFRbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGxheWVycy5tYXAoKHtpZH0pID0+IGlkKTtcbn1cblxuLy8gLS0tIExheWVyIEdyb3VwIFV0aWxpdGllcyAtLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0xheWVyR3JvdXAocHJvcHM/OiBQYXJ0aWFsPExheWVyT3JkZXJHcm91cD4pOiBMYXllck9yZGVyR3JvdXAge1xuICByZXR1cm4ge1xuICAgIGlkOiBwcm9wcz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAgbGFiZWw6IHByb3BzPy5sYWJlbCA/PyAnTmV3IGdyb3VwJyxcbiAgICBpc1Zpc2libGU6IHByb3BzPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBsYXllck9yZGVyOiBwcm9wcz8ubGF5ZXJPcmRlciA/PyBbXSxcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHByb3BzPy5pc0luY2x1ZGVkSW5MZWdlbmQgPz8gdHJ1ZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBlbGVtZW50OiBMYXllck9yZGVyRW50cnksXG4gIGF0SW5kZXg/OiBudW1iZXJcbik6IExheWVyT3JkZXIge1xuICBjb25zdCBpZHggPSBhdEluZGV4ID8/IDA7XG4gIGNvbnN0IHJlc3VsdCA9IFsuLi5sYXllck9yZGVyXTtcbiAgcmVzdWx0LnNwbGljZShpZHgsIDAsIGVsZW1lbnQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBlbGVtZW50OiBMYXllck9yZGVyRW50cnlcbik6IExheWVyT3JkZXIge1xuICBpZiAoIWxheWVyT3JkZXIpIHJldHVybiBbXTtcbiAgY29uc3QgZWxlbWVudElkID0gdHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnID8gZWxlbWVudCA6IGVsZW1lbnQuaWQ7XG4gIGxldCBuZXdMYXllck9yZGVyID0gbGF5ZXJPcmRlci5maWx0ZXIoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkICE9PSBlbGVtZW50SWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeSAhPT0gZWxlbWVudElkO1xuICB9KTtcblxuICBuZXdMYXllck9yZGVyID0gbmV3TGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIsIGVsZW1lbnRJZClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld0xheWVyT3JkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGxheWVyR3JvdXBJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBsZXQgZ3JvdXA6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllck9yZGVyLmxlbmd0aCAmJiAhZ3JvdXA7IGkrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gbGF5ZXJPcmRlcltpXTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGdyb3VwID1cbiAgICAgICAgZ3JwLmlkID09PSBsYXllckdyb3VwSWQgPyBncnAgOiBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBHcm91cHMgdGhhdCBjb250YWluIGBlbnRyeUlkYCwgbmVhcmVzdCBwYXJlbnQgZmlyc3QuXG4gKiBgZW50cnlJZGAgbWF5IGJlIGEgbGF5ZXIgaWQgb3IgYSBuZXN0ZWQgZ3JvdXAgaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmNlc3RvckxheWVyR3JvdXBzKGxheWVyT3JkZXI6IExheWVyT3JkZXIsIGVudHJ5SWQ6IHN0cmluZyk6IExheWVyT3JkZXJHcm91cFtdIHtcbiAgY29uc3QgYW5jZXN0b3JzOiBMYXllck9yZGVyR3JvdXBbXSA9IFtdO1xuXG4gIGNvbnN0IHZpc2l0ID0gKGVudHJpZXM6IExheWVyT3JkZXIpOiBib29sZWFuID0+IHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChlbnRyeSA9PT0gZW50cnlJZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmlkID09PSBlbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHZpc2l0KGdyb3VwLmxheWVyT3JkZXIpKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKGdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICB2aXNpdChsYXllck9yZGVyKTtcbiAgcmV0dXJuIGFuY2VzdG9ycztcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgbGF5ZXIgc2hvdWxkIGJlIGRyYXduIGluIHRoZSBtYXAgbGVnZW5kLlxuICogQSBsYXllciBzdGF5cyBvbiB0aGUgbWFwIHdoZW4gdGhpcyBpcyBmYWxzZS4gTWlzc2luZyBmbGFncyBjb3VudCBhcyBpbmNsdWRlZC5cbiAqIEFuIGFuY2VzdG9yIGdyb3VwIHdpdGggYGlzSW5jbHVkZWRJbkxlZ2VuZDogZmFsc2VgIGhpZGVzIHRoZSBsYXllciBhcyB3ZWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclNob3duSW5MZWdlbmQoXG4gIGxheWVyOiB7aWQ6IHN0cmluZzsgY29uZmlnOiB7aXNJbmNsdWRlZEluTGVnZW5kPzogYm9vbGVhbn19LFxuICBsYXllck9yZGVyPzogTGF5ZXJPcmRlclxuKTogYm9vbGVhbiB7XG4gIGlmIChsYXllci5jb25maWcuaXNJbmNsdWRlZEluTGVnZW5kID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIWxheWVyT3JkZXI/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBnZXRBbmNlc3RvckxheWVyR3JvdXBzKGxheWVyT3JkZXIsIGxheWVyLmlkKS5ldmVyeShcbiAgICBncm91cCA9PiBncm91cC5pc0luY2x1ZGVkSW5MZWdlbmQgIT09IGZhbHNlXG4gICk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgcGFyZW50IGdyb3VwIHRoYXQgY29udGFpbnMgYSBnaXZlbiBsYXllciBJRC5cbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBsYXllciBpcyBhdCB0aGUgcm9vdCBsZXZlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnRHcm91cEZvckxheWVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgbGF5ZXJPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JvdXAubGF5ZXJPcmRlci5zb21lKGUgPT4gdHlwZW9mIGUgPT09ICdzdHJpbmcnICYmIGUgPT09IGxheWVySWQpKSB7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5lc3RlZCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKGdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgICAgaWYgKG5lc3RlZCkgcmV0dXJuIG5lc3RlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllckVudHJ5SWQ6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBsYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgIGlzUGxhaW5PYmplY3QoZW50cnkpID8gKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkuaWQgPT09IGxheWVyRW50cnlJZCA6IGVudHJ5ID09PSBsYXllckVudHJ5SWRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKGxheWVyT3JkZXI6IExheWVyT3JkZXIsIGxheWVySWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllck9yZGVyLmxlbmd0aCAmJiAhZm91bmQ7IGkrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gbGF5ZXJPcmRlcltpXTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGZvdW5kID0gaXNMYXllclByZXNlbnRJbkxheWVyT3JkZXIoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvdW5kID0gbGF5ZXJJZCA9PT0gZW50cnk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBvbGRFbnRyeTogTGF5ZXJPcmRlckVudHJ5LFxuICBuZXdFbnRyeTogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3Qgb2xkRW50cnlJZCA9IHR5cGVvZiBvbGRFbnRyeSA9PT0gJ3N0cmluZycgPyBvbGRFbnRyeSA6IG9sZEVudHJ5LmlkO1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZW50cnkgPT09IG9sZEVudHJ5SWQgPyBuZXdFbnRyeSA6IGVudHJ5O1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncnAuaWQgPT09IG9sZEVudHJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIG5ld0VudHJ5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JwLFxuICAgICAgICBsYXllck9yZGVyOiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgb2xkRW50cnksIG5ld0VudHJ5KVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIG5ld0xheWVyR3JvdXA6IExheWVyT3JkZXJHcm91cFxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBuZXdMYXllckdyb3VwLmlkKSB7XG4gICAgICAgIHJldHVybiBuZXdMYXllckdyb3VwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JwLFxuICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsYXRMYXllck9yZGVyKGxheWVyT3JkZXI6IExheWVyT3JkZXIpOiBGbGF0TGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBvcmRlckVudHJ5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3JkZXJFbnRyeSkpIHtcbiAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5nZXRGbGF0TGF5ZXJPcmRlcigob3JkZXJFbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpXTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIG9yZGVyRW50cnkgYXMgc3RyaW5nXTtcbiAgfSwgW10gYXMgRmxhdExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYXllck9yZGVySGllcmFyY2h5KFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM/OiBMYXllcltdIHwgcmVhZG9ubHkgTGF5ZXJbXVxuKTogTGF5ZXJPcmRlckhpZXJhcmNoeSB7XG4gIGNvbnN0IHZhbGlkTGF5ZXJzID0gbGF5ZXJzPy5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbGVtZW50KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBbLi4uYWNjLCBbJ2xheWVyR3JvdXAnLCBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cF0gYXMgY29uc3RdO1xuICAgIH1cbiAgICBjb25zdCBsYXllciA9IHZhbGlkTGF5ZXJzPy5maW5kKGwgPT4gbC5pZCA9PT0gZWxlbWVudCk7XG4gICAgaWYgKCFsYXllciB8fCBsYXllci5jb25maWcuaGlkZGVuKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLmFjYywgWydsYXllcicsIGxheWVyXSBhcyBjb25zdF07XG4gIH0sIFtdIGFzIExheWVyT3JkZXJIaWVyYXJjaHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM6IHtpZDogc3RyaW5nfVtdXG4pOiBMYXllck9yZGVyIHtcbiAgcmV0dXJuIGxheWVyT3JkZXIucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChsYXllcnMuZmluZChsID0+IGwuaWQgPT09IGVudHJ5KSkge1xuICAgICAgICBhY2MucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGdycCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncnAubGF5ZXJPcmRlcikge1xuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgLi4uZ3JwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbGF5ZXJzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10gYXMgTGF5ZXJPcmRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSxcbiAgb3JpZ2luTGF5ZXJJZDogc3RyaW5nLFxuICBkZXN0aW5hdGlvbkxheWVySWQ6IHN0cmluZ1xuKTogVmlzU3RhdGVbJ2xheWVyT3JkZXInXSB7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICBjb25zdCBvdmVySW5kZXggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllcklkKTtcblxuICBpZiAoYWN0aXZlSW5kZXggPT09IC0xIHx8IG92ZXJJbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gbGF5ZXJPcmRlcjtcbiAgfVxuICByZXR1cm4gYXJyYXlNb3ZlKGxheWVyT3JkZXIsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGF5ZXJUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIGxheWVySWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBbbGF5ZXJJZCwgLi4ubGF5ZXJPcmRlcl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckhvdmVyUHJvcFZhbHVlKFxuICBkYXRhOiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZmllbGRJbmRleDogbnVtYmVyXG4pIHtcbiAgaWYgKCFkYXRhKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIERhdGFSb3cpIHJldHVybiBkYXRhLnZhbHVlQXQoZmllbGRJbmRleCk7XG4gIHJldHVybiBkYXRhW2ZpZWxkSW5kZXhdO1xufVxuXG4vKiogQ2hlY2tzIGlmIGFueSBEZWNrIGxheWVycyBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyhsYXllcnM6IERlY2tMYXllcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllcnMuc29tZShcbiAgICAvLyBsYXllci5pc0xvYWRlZCBjaGFuZ2VzIGZyZXF1ZW50bHkgaW4gRGVjayAoZXZlbiBvbiBob3Zlcikgc28gd2UgY2hlY2sgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAgbGF5ZXIgPT4gbGF5ZXIuaW50ZXJuYWxTdGF0ZSAmJiAhbGF5ZXIuaXNMb2FkZWRcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFxQkEsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBV0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssaUJBQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLGFBQUEsR0FBQU4sT0FBQTtBQUE2RCxTQUFBTywyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4s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