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

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.
@@ -619,41 +619,63 @@ function replaceInteractionDatasetIds(interactionConfig, dataId, dataIdToReplace
619
619
 
620
620
  /**
621
621
  * Merge splitMaps config with current visStete.
622
+ * Panels are matched by index: index i of `splitMaps`, `state.splitMaps` and
623
+ * `state.splitMapsToBeMerged` is the same map panel.
622
624
  * 1. if current map is split, but splitMap DOESNOT contain maps
623
625
  * : don't merge anything
624
626
  * 2. if current map is NOT split, but splitMaps contain maps
625
- * : add to splitMaps, and add current layers to splitMaps
627
+ * : add to splitMaps, and add current layers to splitMaps.
628
+ * Panels are created once one of them can be merged: it has no layers, or one of its layers exists
629
+ * 3. layers that don't exist yet
630
+ * : save to splitMapsToBeMerged, in the panel at the same index
631
+ * A layer listed in splitMaps only shows in the panels that list it.
626
632
  */
627
633
  function mergeSplitMaps(state) {
628
634
  var splitMaps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
635
+ var layerExists = function layerExists(id) {
636
+ return state.layers.some(function (l) {
637
+ return l.id === id;
638
+ });
639
+ };
640
+ var createPanels = state.splitMaps.length > 0 || splitMaps.some(function (sm) {
641
+ var ids = Object.keys(sm.layers);
642
+ return !ids.length || ids.some(layerExists);
643
+ });
644
+ var currentLayers = (0, _utils.getInitialMapLayersForSplitMap)(state.layers.filter(function (l) {
645
+ return !splitMaps.some(function (sm) {
646
+ return l.id in sm.layers;
647
+ });
648
+ }));
629
649
  var merged = (0, _toConsumableArray2["default"])(state.splitMaps);
630
650
  var unmerged = [];
631
651
  splitMaps.forEach(function (sm, i) {
632
652
  var entries = Object.entries(sm.layers);
633
- if (entries.length > 0) {
634
- entries.forEach(function (_ref4) {
635
- var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
636
- id = _ref5[0],
637
- value = _ref5[1];
638
- // check if layer exists
639
- var pushTo = state.layers.find(function (l) {
640
- return l.id === id;
641
- }) ? merged : unmerged;
642
-
643
- // create map panel if current map is not split
644
- pushTo[i] = pushTo[i] || _objectSpread(_objectSpread({}, sm), {}, {
645
- layers: pushTo === merged ? (0, _utils.getInitialMapLayersForSplitMap)(state.layers) : []
646
- });
647
- pushTo[i].layers = _objectSpread(_objectSpread({}, pushTo[i].layers), {}, (0, _defineProperty2["default"])({}, id, value));
653
+ if (createPanels) {
654
+ // create map panel if current map is not split, keep id
655
+ var panel = merged[i] || _objectSpread(_objectSpread({}, sm), {}, {
656
+ layers: currentLayers
657
+ });
658
+ merged[i] = _objectSpread(_objectSpread({}, panel), {}, {
659
+ layers: _objectSpread(_objectSpread({}, panel.layers), Object.fromEntries(entries.filter(function (_ref4) {
660
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 1),
661
+ id = _ref5[0];
662
+ return layerExists(id);
663
+ })))
648
664
  });
649
- } else {
650
- // We are merging if there are no layers in both split map
651
- merged.push(sm);
652
665
  }
666
+ unmerged[i] = _objectSpread(_objectSpread({}, sm), {}, {
667
+ layers: Object.fromEntries(entries.filter(function (_ref6) {
668
+ var _ref7 = (0, _slicedToArray2["default"])(_ref6, 1),
669
+ id = _ref7[0];
670
+ return !layerExists(id);
671
+ }))
672
+ });
653
673
  });
654
674
  return _objectSpread(_objectSpread({}, state), {}, {
655
675
  splitMaps: merged,
656
- splitMapsToBeMerged: [].concat((0, _toConsumableArray2["default"])(state.splitMapsToBeMerged), unmerged)
676
+ splitMapsToBeMerged: unmerged.some(function (sm) {
677
+ return Object.keys(sm.layers).length;
678
+ }) ? (0, _utils.combineSplitMapsByIndex)(state.splitMapsToBeMerged, unmerged) : state.splitMapsToBeMerged
657
679
  });
658
680
  }
659
681
 
@@ -843,8 +865,8 @@ function validateSavedLayerColumns(fields) {
843
865
  columns[key] = _objectSpread({}, emptyCols[key]);
844
866
  var saved = savedCols[key];
845
867
  if (saved) {
846
- var fieldIdx = fields.findIndex(function (_ref6) {
847
- var name = _ref6.name;
868
+ var fieldIdx = fields.findIndex(function (_ref8) {
869
+ var name = _ref8.name;
848
870
  return name === saved;
849
871
  });
850
872
  if (fieldIdx > -1) {
@@ -907,9 +929,9 @@ function validateColumn(column, columns, allFields) {
907
929
  * @param {Object} options
908
930
  * @return {Object} - validated textlabel
909
931
  */
910
- function validateSavedTextLabel(fields, _ref7, savedTextLabel) {
911
- var _ref8 = (0, _slicedToArray2["default"])(_ref7, 1),
912
- layerTextLabel = _ref8[0];
932
+ function validateSavedTextLabel(fields, _ref9, savedTextLabel) {
933
+ var _ref0 = (0, _slicedToArray2["default"])(_ref9, 1),
934
+ layerTextLabel = _ref0[0];
913
935
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
914
936
  var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
915
937
 
@@ -956,10 +978,10 @@ function getSavedVisualChannelValue(savedLayer, key) {
956
978
  */
957
979
  function validateSavedVisualChannels(fields, newLayer, savedLayer) {
958
980
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
959
- Object.values(newLayer.visualChannels).forEach(function (_ref9) {
960
- var field = _ref9.field,
961
- scale = _ref9.scale,
962
- key = _ref9.key;
981
+ Object.values(newLayer.visualChannels).forEach(function (_ref1) {
982
+ var field = _ref1.field,
983
+ scale = _ref1.scale,
984
+ key = _ref1.key;
963
985
  var savedField = getSavedVisualChannelValue(savedLayer, field);
964
986
  var savedScale = getSavedVisualChannelValue(savedLayer, scale);
965
987
  var foundField;
@@ -1164,7 +1186,7 @@ function mergeDatasetsByOrder(state, newDataEntries) {
1164
1186
  * It ignores `undefined` or `null` values, but returns `null` if no mode could be calculated.
1165
1187
  */
1166
1188
  function getValueWithHighestOccurrence(arr) {
1167
- var _ref11;
1189
+ var _ref13;
1168
1190
  var tallys = new Map();
1169
1191
  arr.forEach(function (value) {
1170
1192
  if ((0, _commonUtils.notNullorUndefined)(value)) {
@@ -1179,7 +1201,7 @@ function getValueWithHighestOccurrence(arr) {
1179
1201
  if (tallys.size === 0) {
1180
1202
  return null;
1181
1203
  }
1182
- return (_ref11 = (0, _toConsumableArray2["default"])(tallys.entries())) === null || _ref11 === void 0 ? void 0 : _ref11.reduce(function (acc, next) {
1204
+ return (_ref13 = (0, _toConsumableArray2["default"])(tallys.entries())) === null || _ref13 === void 0 ? void 0 : _ref13.reduce(function (acc, next) {
1183
1205
  return next[1] > acc[1] ? next : acc;
1184
1206
  })[0];
1185
1207
  }
@@ -1232,4 +1254,4 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
1232
1254
  prop: 'editor',
1233
1255
  combineConfigs: combineEditorConfigs
1234
1256
  }];
1235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfbGF5ZXJVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwiZmluZEJ5SWQiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJpc1BsYWluT2JqZWN0IiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiZmluZCIsIl9yZWYzIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJhZ2dyZWdhdGUiLCJBR0dSRUdBVElPTl9UWVBFUyIsIm1heGltdW0iLCJsaW1pdFNlYXJjaCIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsInNtIiwiZW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJwdXNoVG8iLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzQ29uZmlnQWN0aXZlIiwiaXNWYWxpZFRvU2F2ZSIsIm1lcmdlQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsImV4aXN0aW5nSWRzIiwidmFsaWRBbm5vdGF0aW9ucyIsImlzQW5ub3RhdGlvbktpbmQiLCJraW5kIiwiYW5jaG9yUG9pbnQiLCJldmVyeSIsImlzRmluaXRlIiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY2IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsIl9yZWY3Iiwic2F2ZWRUZXh0TGFiZWwiLCJfcmVmOCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwiYWNjdSIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZjIiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmOSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJ2aXNDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMSIsInRhbGx5cyIsIk1hcCIsIm5vdE51bGxvclVuZGVmaW5lZCIsInNldCIsImdldCIsIlZJU19TVEFURV9NRVJHRVJTIiwiZXhwb3J0cyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzLFxuICBmaW5kQnlJZCxcbiAgYWdncmVnYXRlLFxuICBpc1BsYWluT2JqZWN0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9UWVBFUyxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgaXNBbm5vdGF0aW9uS2luZCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWcsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJHcm91cFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGUsIERhdGFzZXRzLCBhc3NpZ25HcHVDaGFubmVscywgcmVzZXRGaWx0ZXJHcHVNb2RlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2ZpbHRlcnMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUZpbHRlck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZmlsdGVyc1RvTWVyZ2U/Lm1hcChsID0+IGwuaWQpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUZpbHRlck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICB2YWxpZGF0ZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlclxuICApO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlcixcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG4vLyByZXBsYWNlIGRhdGFJZCBpbiBzYXZlZCBGaWx0ZXJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRmlsdGVyRGF0YXNldElkcyhcbiAgc2F2ZWRGaWx0ZXI6IEZpbHRlcltdLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlcGxhY2VkOiBGaWx0ZXJbXSA9IFtdO1xuICBzYXZlZEZpbHRlci5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgaWYgKGZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgbmV3RGF0YUlkID0gZmlsdGVyLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkKSk7XG4gICAgICBsZXQgcGxvdFR5cGU7XG4gICAgICAvLyBUT0RPOiBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdG8gc2F2ZSBwbG90VHlwZS5jb2xvcnNCeURhdGFJZFxuICAgICAgaWYgKGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQ/LltkYXRhSWRdKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgY29sb3JCeURhdGFJZCBpbiBmaWx0ZXIucGxvdFR5cGVcbiAgICAgICAgY29uc3Qge1tkYXRhSWRdOiBjb2xvciwgLi4ucmVzdH0gPSBmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICAgICAgICBwbG90VHlwZSA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgY29sb3JzQnlEYXRhSWQ6IHtcbiAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICBbZGF0YUlkVG9Vc2VdOiBjb2xvclxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkLFxuICAgICAgICAuLi4ocGxvdFR5cGUgPyB7cGxvdFR5cGV9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIGxheWVyQ29uZmlnKVxuICAgIDogbGF5ZXJDb25maWc7XG5cbiAgaWYgKCFwYXJzZWRMYXllckNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgW3BhcnNlZExheWVyQ29uZmlnXSxcbiAgICB7YWxsb3dFbXB0eUNvbHVtbjogdHJ1ZX1cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGZpbHRlciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGaWx0ZXIoXG4gIG5ld0ZpbHRlcjogRmlsdGVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHtmaWx0ZXJzOiBbbmV3RmlsdGVyXX0sIHNjaGVtYSk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmZpbHRlcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlXG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICBsZXQgbWVyZ2VkU3RhdGU6IFMgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcblxuICAvLyBBcHBseSBwZW5kaW5nIGxheWVyT3JkZXIgd2l0aCBncm91cHMgaWYgbGF5ZXJzIGFyZSBub3cgYXZhaWxhYmxlXG4gIGlmIChtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZCAmJiBtZXJnZWRTdGF0ZS5sYXllcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNhdmVkT3JkZXIgPSBtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZDtcbiAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJPcmRlcihtZXJnZWRTdGF0ZSwgc2F2ZWRPcmRlcik7XG4gICAgLy8gS2VlcCBzYXZlZExheWVyT3JkZXIgYXZhaWxhYmxlIGZvciBmdXR1cmUgZGVmZXJyZWQgbGF5ZXJzXG4gICAgaWYgKG1lcmdlZFN0YXRlLmxheWVyVG9CZU1lcmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IHsuLi5tZXJnZWRTdGF0ZSwgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkT3JkZXJ9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG5cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgY29uc3QgbmV3RmxhdExheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIC8vIElmIG5vIGdyb3VwcyBleGlzdCBpbiBjdXJyZW50IG9yZGVyLCBqdXN0IHVzZSB0aGUgbmV3IGZsYXQgb3JkZXJcbiAgY29uc3QgaGFzR3JvdXBzID0gY3VycmVudE9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdMYXllck9yZGVyOiBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgICAgIG5ld0xheWVyc1xuICAgIH07XG4gIH1cblxuICAvLyBSZWJ1aWxkIGxheWVyT3JkZXIgcHJlc2VydmluZyBncm91cHMgaW4gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLlxuICAvLyBSZXBsYWNlIGVhY2ggc3RyaW5nIGVudHJ5IHdpdGggaXRzIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgLy8gYW5kIGtlZXAgZ3JvdXBzIGFzLWlzLlxuICBjb25zdCBleGlzdGluZ0ZsYXRJZHMgPSBuZXcgU2V0KFxuICAgIGN1cnJlbnRPcmRlci5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgYXMgc3RyaW5nW11cbiAgKTtcbiAgY29uc3QgbmV3SW5zZXJ0ZWRJZHMgPSBuZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gIWV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKTtcblxuICAvLyBSZWJ1aWxkOiB3YWxrIHRocm91Z2ggY3VycmVudE9yZGVyLCByZXBsYWNlIHN0cmluZyBlbnRyaWVzIHdpdGggdGhlaXJcbiAgLy8gbmV3IHBvc2l0aW9uIGVxdWl2YWxlbnRzIGZyb20gbmV3RmxhdExheWVyT3JkZXIsIHRoZW4gYXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnNcbiAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gIGNvbnN0IGZsYXRRdWV1ZSA9IFsuLi5uZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpXTtcbiAgbGV0IGZsYXRJZHggPSAwO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgY3VycmVudE9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXN1bHQucHVzaChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHJlb3JkZXJlZCBmbGF0IGxpc3RcbiAgICAgIGlmIChmbGF0SWR4IDwgZmxhdFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChmbGF0UXVldWVbZmxhdElkeF0pO1xuICAgICAgICBmbGF0SWR4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnMgYXQgdGhlIGZyb250ICh0aGV5IGFyZSBuZXcpXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcjogWy4uLm5ld0luc2VydGVkSWRzLCAuLi5yZXN1bHRdLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNhdmVkIGxheWVyT3JkZXIgd2l0aCBjdXJyZW50IHN0YXRlIHRvIHJlc3RvcmUgbGF5ZXIgZ3JvdXBzLlxuICogQ2FsbGVkIGFmdGVyIGxheWVycyBoYXZlIGJlZW4gbWVyZ2VkLiBJZiB0aGUgc2F2ZWQgY29uZmlnIGNvbnRhaW5zIGEgbGF5ZXJPcmRlclxuICogd2l0aCBncm91cHMsIHRoaXMgcmVwbGFjZXMgdGhlIGZsYXQgbGF5ZXJPcmRlciB3aXRoIHRoZSBzYXZlZCBoaWVyYXJjaGljYWwgb25lLFxuICogZmlsdGVyaW5nIG91dCBhbnkgbGF5ZXIgSURzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyT3JkZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNhdmVkTGF5ZXJPcmRlcj86IGFueVtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghc2F2ZWRMYXllck9yZGVyIHx8ICFBcnJheS5pc0FycmF5KHNhdmVkTGF5ZXJPcmRlcikgfHwgc2F2ZWRMYXllck9yZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzYXZlZCBsYXllck9yZGVyIGNvbnRhaW5zIGFueSBncm91cHNcbiAgY29uc3QgaGFzR3JvdXBzID0gc2F2ZWRMYXllck9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIC8vIE5vIGdyb3VwcyAtIHRoZSBsYXllciBtZXJnZXIgYWxyZWFkeSBoYW5kbGVkIG9yZGVyaW5nIHZpYSBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiBsYXllcnMgaGF2ZW4ndCBiZWVuIG1lcmdlZCB5ZXQsIHN0b3JlIGZvciBsYXRlclxuICBpZiAoc3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZExheWVyT3JkZXJcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgYSBzZXQgb2YgdmFsaWQgbGF5ZXIgSURzIGZyb20gY3VycmVudCBzdGF0ZVxuICBjb25zdCB2YWxpZExheWVySWRzID0gbmV3IFNldChzdGF0ZS5sYXllcnMubWFwKGwgPT4gbC5pZCkpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGZpbHRlciB0aGUgc2F2ZWQgbGF5ZXJPcmRlciB0byBvbmx5IGluY2x1ZGUgdmFsaWQgbGF5ZXJzXG4gIGZ1bmN0aW9uIGZpbHRlckxheWVyT3JkZXIob3JkZXI6IGFueVtdKTogTGF5ZXJPcmRlciB7XG4gICAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIpO1xuICAgICAgICAvLyBLZWVwIHRoZSBncm91cCBldmVuIGlmIGVtcHR5ICh1c2VyIG1heSB3YW50IHRoZSBlbXB0eSBncm91cClcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IGZpbHRlcmVkR3JvdXBPcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiB2YWxpZExheWVySWRzLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgcmVzdG9yZWRMYXllck9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihzYXZlZExheWVyT3JkZXIpO1xuXG4gIC8vIEZpbmQgYW55IGxheWVycyBpbiB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IGFyZW4ndCBpbiB0aGUgcmVzdG9yZWQgb3JkZXJcbiAgLy8gKGNvdWxkIGhhcHBlbiBpZiBsYXllcnMgd2VyZSBhZGRlZCBiZXR3ZWVuIHNhdmUgYW5kIGxvYWQpXG4gIGNvbnN0IGxheWVySWRzSW5SZXN0b3JlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmdW5jdGlvbiBjb2xsZWN0SWRzKG9yZGVyOiBhbnlbXSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb2xsZWN0SWRzKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxheWVySWRzSW5SZXN0b3JlZC5hZGQoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb2xsZWN0SWRzKHJlc3RvcmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gQWRkIGFueSBtaXNzaW5nIGxheWVycyBhdCB0aGUgdG9wXG4gIGNvbnN0IG1pc3NpbmdMYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIWxheWVySWRzSW5SZXN0b3JlZC5oYXMobC5pZCkpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogWy4uLm1pc3NpbmdMYXllcnMsIC4uLnJlc3RvcmVkTGF5ZXJPcmRlcl0sXG4gICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHwga2V5ID09PSAnYnJ1c2gnIHx8IGtleSA9PT0gJ2dlb2NvZGVyJ1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkID0gWy4uLnN0YXRlLnNwbGl0TWFwc107XG4gIGNvbnN0IHVubWVyZ2VkID0gW107XG4gIHNwbGl0TWFwcy5mb3JFYWNoKChzbSwgaSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVudHJpZXMuZm9yRWFjaCgoW2lkLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgLy8gY2hlY2sgaWYgbGF5ZXIgZXhpc3RzXG4gICAgICAgIGNvbnN0IHB1c2hUbyA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gaWQpID8gbWVyZ2VkIDogdW5tZXJnZWQ7XG5cbiAgICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXRcbiAgICAgICAgcHVzaFRvW2ldID0gcHVzaFRvW2ldIHx8IHtcbiAgICAgICAgICAvLyBrZWVwIGlkXG4gICAgICAgICAgLi4uc20sXG4gICAgICAgICAgbGF5ZXJzOiBwdXNoVG8gPT09IG1lcmdlZCA/IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChzdGF0ZS5sYXllcnMpIDogW11cbiAgICAgICAgfTtcbiAgICAgICAgcHVzaFRvW2ldLmxheWVycyA9IHtcbiAgICAgICAgICAuLi5wdXNoVG9baV0ubGF5ZXJzLFxuICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgYXJlIG1lcmdpbmcgaWYgdGhlcmUgYXJlIG5vIGxheWVycyBpbiBib3RoIHNwbGl0IG1hcFxuICAgICAgbWVyZ2VkLnB1c2goc20pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgZWZmZWN0cyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgW2xheWVyVGV4dExhYmVsXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0ZXh0IGxhYmVsIGZpZWxkOiAke0pTT04uc3RyaW5naWZ5KHRleHRMYWJlbC5maWVsZCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2F2ZWQgdmlzdWFsIGNoYW5uZWwgZmllbGQvc2NhbGUgbWF5IGxpdmUgaW4gYW55IG9mOlxuICogLSBgY29uZmlnW2tleV1gIGFmdGVyIHNjaGVtYSBwYXJzZSAoVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGZvbGRzIGNoYW5uZWxzIGludG8gY29uZmlnKVxuICogLSBgdmlzdWFsQ2hhbm5lbHNba2V5XWAgYXMgYSBzaWJsaW5nIG9mIGBjb25maWdgICh1bnBhcnNlZCBhZGREYXRhVG9NYXAgcGF5bG9hZClcbiAqIC0gYGNvbmZpZy52aXN1YWxDaGFubmVsc1trZXldYCAoY29tbW9uIG1pc3Rha2Ugb2YgbmVzdGluZyB2aXN1YWxDaGFubmVscyBpbnNpZGUgY29uZmlnKVxuICpcbiAqIFdpdGhvdXQgdGhpcyBsb29rdXAsIHByb2dyYW1tYXRpYyBHZW9KU09OIHN0cm9rZUNvbG9yRmllbGQgbmV2ZXIgYmluZHMgYW5kXG4gKiBzdHJva2VDb2xvckRvbWFpbiBzdGF5cyBhdCB0aGUgZGVmYXVsdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsIGtleTogc3RyaW5nKTogYW55IHtcbiAgY29uc3QgY29uZmlnID0gc2F2ZWRMYXllci5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWdba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1trZXldO1xuICB9XG4gIGNvbnN0IGNoYW5uZWxzID1cbiAgICAoc2F2ZWRMYXllciBhcyB7dmlzdWFsQ2hhbm5lbHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkudmlzdWFsQ2hhbm5lbHMgfHxcbiAgICAoY29uZmlnICYmIGNvbmZpZy52aXN1YWxDaGFubmVscyk7XG4gIGlmIChjaGFubmVscyAmJiB0eXBlb2YgY2hhbm5lbHMgPT09ICdvYmplY3QnICYmIGNoYW5uZWxzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGFubmVsc1trZXldO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pOiBudWxsIHwgTGF5ZXIge1xuICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQsIHNjYWxlLCBrZXl9KSA9PiB7XG4gICAgY29uc3Qgc2F2ZWRGaWVsZCA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIGZpZWxkKTtcbiAgICBjb25zdCBzYXZlZFNjYWxlID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgc2NhbGUpO1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZEZpZWxkPy5uYW1lKSB7XG4gICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gc2F2ZWRGaWVsZC5uYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZENoYW5uZWwgPSB7XG4gICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgIC4uLihzYXZlZFNjYWxlID8ge1tzY2FsZV06IHNhdmVkU2NhbGV9IDoge30pXG4gICAgfTtcbiAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgfVxuXG4gICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBzYXZlZEZpZWxkPy5uYW1lO1xuICAgICAgaWYgKGZpZWxkTmFtZSAmJiBmaWVsZE5hbWUgIT09IG5ld0xheWVyLmNvbmZpZ1tmaWVsZF0/Lm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB2aXN1YWwgY2hhbm5lbCBmaWVsZDogJHtmaWVsZH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgcHJvcDogJ2Fubm90YXRpb25zJyxcbiAgICB0b01lcmdlUHJvcDogJ2Fubm90YXRpb25zVG9CZU1lcmdlZCdcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBV0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBUUEsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBb0JBLElBQUFTLE1BQUEsR0FBQVQsT0FBQTtBQUVBLElBQUFVLFdBQUEsR0FBQVYsT0FBQTtBQUFzRCxJQUFBVyxTQUFBO0VBQUFDLFVBQUE7QUFBQSxTQUFBQywyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxDQUFBLEVBQUFDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxXQUFBQSxFQUFBLElBQUFULENBQUEsR0FBQUEsQ0FBQSxDQUFBa0IsSUFBQSxDQUFBcEIsQ0FBQSxNQUFBWSxDQUFBLFdBQUFBLEVBQUEsUUFBQVosQ0FBQSxHQUFBRSxDQUFBLENBQUFtQixJQUFBLFdBQUFILENBQUEsR0FBQWxCLENBQUEsQ0FBQWEsSUFBQSxFQUFBYixDQUFBLEtBQUFDLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxJQUFBbUIsQ0FBQSxPQUFBRixDQUFBLEdBQUFqQixDQUFBLEtBQUFlLENBQUEsV0FBQUEsRUFBQSxVQUFBRyxDQUFBLFlBQUFoQixDQUFBLGNBQUFBLENBQUEsOEJBQUFpQixDQUFBLFFBQUFGLENBQUE7QUFBQSxTQUFBViw0QkFBQVAsQ0FBQSxFQUFBa0IsQ0FBQSxRQUFBbEIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUEsT0FBQWhCLENBQUEsTUFBQXFCLFFBQUEsQ0FBQUgsSUFBQSxDQUFBcEIsQ0FBQSxFQUFBd0IsS0FBQSw2QkFBQXRCLENBQUEsSUFBQUYsQ0FBQSxDQUFBeUIsV0FBQSxLQUFBdkIsQ0FBQSxHQUFBRixDQUFBLENBQUF5QixXQUFBLENBQUFDLElBQUEsYUFBQXhCLENBQUEsY0FBQUEsQ0FBQSxHQUFBRyxLQUFBLENBQUFzQixJQUFBLENBQUEzQixDQUFBLG9CQUFBRSxDQUFBLCtDQUFBMEIsSUFBQSxDQUFBMUIsQ0FBQSxJQUFBb0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUE7QUFBQSxTQUFBSSxrQkFBQXRCLENBQUEsRUFBQWtCLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsTUFBQVUsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLFlBQUFQLENBQUEsTUFBQVcsQ0FBQSxHQUFBUCxLQUFBLENBQUFhLENBQUEsR0FBQWpCLENBQUEsR0FBQWlCLENBQUEsRUFBQWpCLENBQUEsSUFBQVcsQ0FBQSxDQUFBWCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBVyxDQUFBO0FBQUEsU0FBQWlCLGVBQUEzQixDQUFBLFFBQUE0QixDQUFBLEdBQUFDLFlBQUEsQ0FBQTdCLENBQUEsZ0NBQUE4QixRQUFBLENBQUFGLENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQTdCLENBQUEsRUFBQUYsQ0FBQSxvQkFBQWdDLFFBQUEsQ0FBQTlCLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFELENBQUEsR0FBQUMsQ0FBQSxDQUFBQyxNQUFBLENBQUE4QixXQUFBLGtCQUFBaEMsQ0FBQSxRQUFBNkIsQ0FBQSxHQUFBN0IsQ0FBQSxDQUFBbUIsSUFBQSxDQUFBbEIsQ0FBQSxFQUFBRixDQUFBLGdDQUFBZ0MsUUFBQSxDQUFBRixDQUFBLFVBQUFBLENBQUEsWUFBQWQsU0FBQSx5RUFBQWhCLENBQUEsR0FBQWtDLE1BQUEsR0FBQUMsTUFBQSxFQUFBakMsQ0FBQTtBQUFBLFNBQUFrQyxRQUFBbkMsQ0FBQSxFQUFBRCxDQUFBLFFBQUFFLENBQUEsR0FBQW1DLE1BQUEsQ0FBQUMsSUFBQSxDQUFBckMsQ0FBQSxPQUFBb0MsTUFBQSxDQUFBRSxxQkFBQSxRQUFBdEIsQ0FBQSxHQUFBb0IsTUFBQSxDQUFBRSxxQkFBQSxDQUFBdEMsQ0FBQSxHQUFBRCxDQUFBLEtBQUFpQixDQUFBLEdBQUFBLENBQUEsQ0FBQXVCLE1BQUEsV0FBQXhDLENBQUEsV0FBQXFDLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQXhDLENBQUEsRUFBQUQsQ0FBQSxFQUFBMEMsVUFBQSxPQUFBeEMsQ0FBQSxDQUFBeUMsSUFBQSxDQUFBQyxLQUFBLENBQUExQyxDQUFBLEVBQUFlLENBQUEsWUFBQWYsQ0FBQTtBQUFBLFNBQUEyQyxjQUFBNUMsQ0FBQSxhQUFBRCxDQUFBLE1BQUFBLENBQUEsR0FBQThDLFNBQUEsQ0FBQXRDLE1BQUEsRUFBQVIsQ0FBQSxVQUFBRSxDQUFBLFdBQUE0QyxTQUFBLENBQUE5QyxDQUFBLElBQUE4QyxTQUFBLENBQUE5QyxDQUFBLFFBQUFBLENBQUEsT0FBQW9DLE9BQUEsQ0FBQUMsTUFBQSxDQUFBbkMsQ0FBQSxPQUFBNkMsT0FBQSxXQUFBL0MsQ0FBQSxRQUFBZ0QsZ0JBQUEsYUFBQS9DLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLENBQUFGLENBQUEsU0FBQXFDLE1BQUEsQ0FBQVkseUJBQUEsR0FBQVosTUFBQSxDQUFBYSxnQkFBQSxDQUFBakQsQ0FBQSxFQUFBb0MsTUFBQSxDQUFBWSx5QkFBQSxDQUFBL0MsQ0FBQSxLQUFBa0MsT0FBQSxDQUFBQyxNQUFBLENBQUFuQyxDQUFBLEdBQUE2QyxPQUFBLFdBQUEvQyxDQUFBLElBQUFxQyxNQUFBLENBQUFjLGNBQUEsQ0FBQWxELENBQUEsRUFBQUQsQ0FBQSxFQUFBcUMsTUFBQSxDQUFBSSx3QkFBQSxDQUFBdkMsQ0FBQSxFQUFBRixDQUFBLGlCQUFBQyxDQUFBLElBbER0RDtBQUNBO0FBbURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTbUQsWUFBWUEsQ0FDMUJDLEtBQVEsRUFDUkMsY0FBZ0UsRUFDaEVDLFVBQW9CLEVBQ2pCO0VBQ0gsSUFBTUMsbUJBQW1CLEdBQUdELFVBQVUsR0FDbENELGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFRyxHQUFHLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsRUFBRTtFQUFBLEVBQUMsR0FDOUJOLEtBQUssQ0FBQ0csbUJBQW1CO0VBRTdCLElBQUksQ0FBQ25ELEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ0QsY0FBYyxDQUFDLElBQUksQ0FBQ0EsY0FBYyxDQUFDOUMsTUFBTSxFQUFFO0lBQzVELE9BQU82QyxLQUFLO0VBQ2Q7RUFFQSxJQUFBTyxxQkFBQSxHQUE2QyxJQUFBQyxvQ0FBNkIsRUFBQ1IsS0FBSyxFQUFFQyxjQUFjLENBQUM7SUFBMUZRLFNBQVMsR0FBQUYscUJBQUEsQ0FBVEUsU0FBUztJQUFFQyxNQUFNLEdBQUFILHFCQUFBLENBQU5HLE1BQU07SUFBRUMsZUFBZSxHQUFBSixxQkFBQSxDQUFmSSxlQUFlO0VBQ3pDLElBQUlDLGNBQWMsR0FBR0MsK0JBQStCLENBQ2xEYixLQUFLLENBQUNjLE9BQU8sRUFDYkwsU0FBUyxFQUNUTixtQkFDRixDQUFDOztFQUVEO0VBQ0FTLGNBQWMsR0FBRyxJQUFBRyx5QkFBa0IsRUFBQ0gsY0FBYyxDQUFDO0VBQ25EQSxjQUFjLEdBQUcsSUFBQUksd0JBQWlCLEVBQUNKLGNBQWMsQ0FBQztFQUNsRDtFQUNBLElBQU1LLGdCQUFnQixHQUFHLElBQUFDLGdCQUFJLEVBQUMsSUFBQUMsdUJBQVcsRUFBQ1YsU0FBUyxDQUFDTCxHQUFHLENBQUMsVUFBQTFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMwRCxNQUFNO0VBQUEsRUFBQyxDQUFDLENBQUM7RUFFeEUsSUFBTUMsUUFBUSxHQUFHLElBQUFDLDZCQUFzQixFQUNyQ0wsZ0JBQWdCLEVBQ2hCTixlQUFlLEVBQ2ZDLGNBQWMsRUFDZFosS0FBSyxDQUFDdUIsTUFDUixDQUFDO0VBRUQsT0FBQS9CLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO0lBQ1JjLE9BQU8sRUFBRUYsY0FBYztJQUN2QlksUUFBUSxFQUFFSCxRQUFRO0lBQ2xCbEIsbUJBQW1CLEVBQW5CQSxtQkFBbUI7SUFDbkJzQixnQkFBZ0IsS0FBQUMsTUFBQSxLQUFBQyxtQkFBQSxhQUFNM0IsS0FBSyxDQUFDeUIsZ0JBQWdCLE9BQUFFLG1CQUFBLGFBQUtqQixNQUFNO0VBQUM7QUFFNUQ7O0FBRUE7QUFDTyxTQUFTa0IsdUJBQXVCQSxDQUNyQ0MsV0FBcUIsRUFDckJULE1BQWMsRUFDZFUsV0FBbUIsRUFDbkI7RUFDQSxJQUFNQyxRQUFrQixHQUFHLEVBQUU7RUFDN0JGLFdBQVcsQ0FBQ25DLE9BQU8sQ0FBQyxVQUFBUCxNQUFNLEVBQUk7SUFDNUIsSUFBSUEsTUFBTSxDQUFDaUMsTUFBTSxDQUFDWSxRQUFRLENBQUNaLE1BQU0sQ0FBQyxFQUFFO01BQUEsSUFBQWEsZ0JBQUE7TUFDbEMsSUFBTUMsU0FBUyxHQUFHL0MsTUFBTSxDQUFDaUMsTUFBTSxDQUFDaEIsR0FBRyxDQUFDLFVBQUErQixDQUFDO1FBQUEsT0FBS0EsQ0FBQyxLQUFLZixNQUFNLEdBQUdVLFdBQVcsR0FBR0ssQ0FBQztNQUFBLENBQUMsQ0FBQztNQUMxRSxJQUFJQyxRQUFRO01BQ1o7TUFDQSxLQUFBSCxnQkFBQSxHQUFJOUMsTUFBTSxDQUFDaUQsUUFBUSxjQUFBSCxnQkFBQSxnQkFBQUEsZ0JBQUEsR0FBZkEsZ0JBQUEsQ0FBaUJJLGNBQWMsY0FBQUosZ0JBQUEsZUFBL0JBLGdCQUFBLENBQWtDYixNQUFNLENBQUMsRUFBRTtRQUFBLElBQUFrQixpQkFBQTtRQUM3QztRQUNBLElBQUFDLElBQUEsR0FBbUMsRUFBQUQsaUJBQUEsR0FBQW5ELE1BQU0sQ0FBQ2lELFFBQVEsY0FBQUUsaUJBQUEsdUJBQWZBLGlCQUFBLENBQWlCRCxjQUFjLEtBQUksQ0FBQyxDQUFDO1VBQXZERyxLQUFLLEdBQUFELElBQUEsQ0FBZG5CLE1BQU07VUFBYXFCLElBQUksT0FBQUMseUJBQUEsYUFBQUgsSUFBQSxHQUF2Qm5CLE1BQU0sRUFBQWhCLEdBQUEsQ0FBQTVCLGNBQUE7UUFDZDRELFFBQVEsR0FBQTVDLGFBQUEsQ0FBQUEsYUFBQSxLQUNITCxNQUFNLENBQUNpRCxRQUFRO1VBQ2xCQyxjQUFjLEVBQUE3QyxhQUFBLENBQUFBLGFBQUEsS0FDVGlELElBQUksV0FBQTlDLGdCQUFBLGlCQUNObUMsV0FBVyxFQUFHVSxLQUFLO1FBQ3JCLEVBQ0Y7TUFDSDtNQUNBVCxRQUFRLENBQUN6QyxJQUFJLENBQUFFLGFBQUEsQ0FBQUEsYUFBQSxLQUNSTCxNQUFNO1FBQ1RpQyxNQUFNLEVBQUVjO01BQVMsR0FDYkUsUUFBUSxHQUFHO1FBQUNBLFFBQVEsRUFBUkE7TUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9CLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9MLFFBQVEsQ0FBQzVFLE1BQU0sR0FBRzRFLFFBQVEsR0FBRyxJQUFJO0FBQzFDO0FBRU8sU0FBU1ksb0JBQW9CQSxDQUFDQyxXQUFnQixFQUFXO0VBQzlEO0VBQ0EsT0FBT0EsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVDLGNBQWM7QUFDcEM7QUFFTyxTQUFTQyxnQkFBZ0JBLENBQzlCQyxNQUEyQixFQUMzQkgsV0FBZ0IsRUFDUztFQUFBLElBQUFJLHFCQUFBO0VBQ3pCO0VBQ0EsSUFBTUMsV0FBVyxHQUFHO0lBQ2xCQyxPQUFPLEVBQUVDLHdCQUFlO0lBQ3hCQyxNQUFNLEVBQUU7TUFDTkMsUUFBUSxFQUFFO1FBQUM5QixNQUFNLEVBQUUsQ0FBQ3FCLFdBQVcsQ0FBQztRQUFFVSxVQUFVLEVBQUUsQ0FBQ1YsV0FBVyxDQUFDdEMsRUFBRTtNQUFDO0lBQ2hFO0VBQ0YsQ0FBQztFQUVELFFBQUEwQyxxQkFBQSxHQUFPRCxNQUFNLENBQUNRLGdCQUFnQixDQUFDTixXQUFXLENBQUMsY0FBQUQscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQXBDQSxxQkFBQSxDQUFzQ0ssUUFBUSxjQUFBTCxxQkFBQSxnQkFBQUEscUJBQUEsR0FBOUNBLHFCQUFBLENBQWdEekIsTUFBTSxjQUFBeUIscUJBQUEsdUJBQXREQSxxQkFBQSxDQUF5RCxDQUFDLENBQUM7QUFDcEU7QUFFQSxTQUFTbkMsK0JBQStCQSxDQUN0QzJDLFlBQXNCLEVBQ3RCQyxLQUFlLEVBR2Y7RUFBQSxJQUZBQyxjQUFxQixHQUFBakUsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUMxQm1FLFlBQXNCLEdBQUFuRSxTQUFBLENBQUF0QyxNQUFBLE9BQUFzQyxTQUFBLE1BQUFrRSxTQUFBO0VBRXRCLElBQUlFLFFBQVEsT0FBQWxDLG1CQUFBLGFBQU82QixZQUFZLENBQUM7RUFBQyxJQUFBTSxTQUFBLEdBQUFwSCwwQkFBQSxDQUVkK0csS0FBSztJQUFBTSxLQUFBO0VBQUE7SUFBeEIsS0FBQUQsU0FBQSxDQUFBeEcsQ0FBQSxNQUFBeUcsS0FBQSxHQUFBRCxTQUFBLENBQUF2RyxDQUFBLElBQUFDLElBQUEsR0FBMEI7TUFBQSxJQUFmd0csSUFBSSxHQUFBRCxLQUFBLENBQUF0RyxLQUFBO01BQ2IsSUFBTXdHLFdBQVcsR0FBR1AsY0FBYyxDQUFDUSxPQUFPLENBQUNGLElBQUksQ0FBQzFELEVBQUUsQ0FBQztNQUNuRDtNQUNBLElBQUk2RCxRQUFRLEdBQUdQLFlBQVksR0FBRyxDQUFDLEdBQUdDLFFBQVEsQ0FBQzFHLE1BQU07TUFDakQsSUFBSThHLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDbkI7UUFDQSxJQUFJeEYsQ0FBQyxHQUFHd0YsV0FBVyxHQUFHLENBQUM7UUFDdkIsSUFBSUcsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUFDLElBQUFDLEtBQUEsWUFBQUEsTUFBQSxFQUNjO1VBQ2hDO1VBQ0EsSUFBTUMsYUFBYSxHQUFHWixjQUFjLENBQUNqRixDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQzNDMkYsVUFBVSxHQUFHUCxRQUFRLENBQUNVLFNBQVMsQ0FBQyxVQUFBcEMsQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQzdCLEVBQUUsS0FBS2dFLGFBQWE7VUFBQSxFQUFDO1FBQzlELENBQUM7UUFKRCxPQUFPN0YsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJMkYsVUFBVSxHQUFHLENBQUM7VUFBQUMsS0FBQTtRQUFBO1FBS2hDLElBQUlELFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUNuQjtVQUNBRCxRQUFRLEdBQUdDLFVBQVUsR0FBRyxDQUFDO1FBQzNCO01BQ0Y7TUFDQVAsUUFBUSxHQUFHLElBQUFXLGtCQUFXLEVBQUNYLFFBQVEsRUFBRU0sUUFBUSxFQUFFSCxJQUFJLENBQUM7SUFDbEQ7RUFBQyxTQUFBUyxHQUFBO0lBQUFYLFNBQUEsQ0FBQWxILENBQUEsQ0FBQTZILEdBQUE7RUFBQTtJQUFBWCxTQUFBLENBQUFwRyxDQUFBO0VBQUE7RUFDRCxPQUFPbUcsUUFBUTtBQUNqQjtBQUVPLFNBQVNhLHFCQUFxQkEsQ0FBQzFFLEtBQWUsRUFBRTRDLFdBQWdCLEVBQWdCO0VBQ3JGO0VBQ0EsSUFBTStCLGlCQUFpQixHQUFHaEMsb0JBQW9CLENBQUNDLFdBQVcsQ0FBQyxHQUN2REUsZ0JBQWdCLENBQUM5QyxLQUFLLENBQUMrQyxNQUFNLEVBQUVILFdBQVcsQ0FBQyxHQUMzQ0EsV0FBVztFQUVmLElBQUksQ0FBQytCLGlCQUFpQixFQUFFO0lBQ3RCLE9BQU8sSUFBSTtFQUNiO0VBQ0E7RUFDQSxJQUFBQyxxQkFBQSxHQUE0QkMsd0JBQXdCLENBQ2xEN0UsS0FBSyxDQUFDd0IsUUFBUSxFQUNkeEIsS0FBSyxDQUFDOEUsWUFBWSxFQUNsQixDQUFDSCxpQkFBaUIsQ0FBQyxFQUNuQjtNQUFDSSxnQkFBZ0IsRUFBRTtJQUFJLENBQ3pCLENBQUM7SUFMTXRFLFNBQVMsR0FBQW1FLHFCQUFBLENBQVRuRSxTQUFTO0lBQUVDLE1BQU0sR0FBQWtFLHFCQUFBLENBQU5sRSxNQUFNO0VBT3hCLElBQUlBLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUV2RCxNQUFNLElBQUksQ0FBQ3NELFNBQVMsQ0FBQ3RELE1BQU0sRUFBRTtJQUN2QztJQUNBLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBTTZILFFBQVEsR0FBR3ZFLFNBQVMsQ0FBQyxDQUFDLENBQUM7RUFDN0J1RSxRQUFRLENBQUNDLGlCQUFpQixDQUFDakYsS0FBSyxDQUFDd0IsUUFBUSxDQUFDO0VBQzFDLE9BQU93RCxRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGVBQWVBLENBQzdCQyxTQUFpQixFQUNqQnBDLE1BQTJCLEVBQ0Q7RUFBQSxJQUFBcUMscUJBQUE7RUFDMUIsSUFBTUMsa0JBQWtCLEdBQUdDLGlCQUFpQixDQUFDO0lBQUN4RSxPQUFPLEVBQUUsQ0FBQ3FFLFNBQVM7RUFBQyxDQUFDLEVBQUVwQyxNQUFNLENBQUM7RUFDNUUsT0FBT3NDLGtCQUFrQixhQUFsQkEsa0JBQWtCLGdCQUFBRCxxQkFBQSxHQUFsQkMsa0JBQWtCLENBQUV2RSxPQUFPLGNBQUFzRSxxQkFBQSx1QkFBM0JBLHFCQUFBLENBQThCLENBQUMsQ0FBQztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRyxjQUFjQSxDQUM1QlAsUUFBZSxFQUNmakMsTUFBMkIsRUFDRjtFQUFBLElBQUF5QyxxQkFBQTtFQUN6QixJQUFNSCxrQkFBa0IsR0FBR0MsaUJBQWlCLENBQzFDO0lBQUMvRCxNQUFNLEVBQUUsQ0FBQ3lELFFBQVEsQ0FBQztJQUFFMUIsVUFBVSxFQUFFLENBQUMwQixRQUFRLENBQUMxRSxFQUFFO0VBQUMsQ0FBQyxFQUMvQ3lDLE1BQ0YsQ0FBQztFQUNELE9BQU9zQyxrQkFBa0IsYUFBbEJBLGtCQUFrQixnQkFBQUcscUJBQUEsR0FBbEJILGtCQUFrQixDQUFFOUQsTUFBTSxjQUFBaUUscUJBQUEsdUJBQTFCQSxxQkFBQSxDQUE2QixDQUFDLENBQUM7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0MsZUFBZUEsQ0FDN0JDLFNBQXFCLEVBQ3JCM0MsTUFBMkIsRUFDRDtFQUFBLElBQUE0QyxxQkFBQTtFQUMxQixJQUFNTixrQkFBa0IsR0FBR0MsaUJBQWlCLENBQzFDO0lBQUNNLE9BQU8sRUFBRSxDQUFDRixTQUFTLENBQUM7SUFBRUcsV0FBVyxFQUFFLENBQUNILFNBQVMsQ0FBQ3BGLEVBQUU7RUFBQyxDQUFDLEVBQ25EeUMsTUFDRixDQUFDO0VBQ0QsT0FBT3NDLGtCQUFrQixhQUFsQkEsa0JBQWtCLGdCQUFBTSxxQkFBQSxHQUFsQk4sa0JBQWtCLENBQUVPLE9BQU8sY0FBQUQscUJBQUEsdUJBQTNCQSxxQkFBQSxDQUE4QixDQUFDLENBQUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0wsaUJBQWlCQSxDQUMvQmpDLFFBQTJCLEVBQzNCTixNQUEyQixFQUNDO0VBQUEsSUFBQStDLHNCQUFBO0VBQzVCLElBQU1DLFVBQVUsR0FBR2hELE1BQU0sQ0FBQ2lELGVBQWUsQ0FBQztJQUN4QzNDLFFBQVEsRUFBUkE7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPMEMsVUFBVSxJQUFBRCxzQkFBQSxHQUFHL0MsTUFBTSxDQUFDUSxnQkFBZ0IsQ0FBQ3dDLFVBQVUsQ0FBQyxjQUFBRCxzQkFBQSx1QkFBbkNBLHNCQUFBLENBQXFDekMsUUFBUSxHQUFHTSxTQUFTO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzQyxXQUFXQSxDQUN6QmpHLEtBQVEsRUFHTDtFQUFBLElBRkhrRyxhQUE4RCxHQUFBekcsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUNuRVMsVUFBb0IsR0FBQVQsU0FBQSxDQUFBdEMsTUFBQSxPQUFBc0MsU0FBQSxNQUFBa0UsU0FBQTtFQUVwQixJQUFNd0Msa0JBQWtCLEdBQUdqRyxVQUFVLEdBQ2pDLElBQUFrRyxtQ0FBdUIsRUFBQ0YsYUFBYSxDQUFDLEdBQ3RDbEcsS0FBSyxDQUFDbUcsa0JBQWtCO0VBQzVCLElBQUksQ0FBQ25KLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUosYUFBYSxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDL0ksTUFBTSxFQUFFO0lBQzFELE9BQU82QyxLQUFLO0VBQ2Q7RUFDQTtFQUNBLElBQU1xRyxRQUF1QixHQUFHLEVBQUU7RUFDbEMsSUFBTUMsT0FBc0IsR0FBRyxFQUFFO0VBQ2pDSixhQUFhLENBQUN4RyxPQUFPLENBQUMsVUFBQ1csQ0FBYyxFQUFLO0lBQUEsSUFBQWtHLFNBQUE7SUFDeEMsSUFBSWxHLENBQUMsYUFBREEsQ0FBQyxnQkFBQWtHLFNBQUEsR0FBRGxHLENBQUMsQ0FBRStDLE1BQU0sY0FBQW1ELFNBQUEsZUFBVEEsU0FBQSxDQUFXbkYsTUFBTSxJQUFJcEIsS0FBSyxDQUFDd0csaUJBQWlCLENBQUNuRyxDQUFDLENBQUMrQyxNQUFNLENBQUNoQyxNQUFNLENBQUMsRUFBRTtNQUNqRWlGLFFBQVEsQ0FBQy9HLElBQUksQ0FBQ2UsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsTUFBTTtNQUNMaUcsT0FBTyxDQUFDaEgsSUFBSSxDQUFDZSxDQUFDLENBQUM7SUFDakI7RUFDRixDQUFDLENBQUM7RUFFRixJQUFBb0csc0JBQUEsR0FBeUM1Qix3QkFBd0IsQ0FDL0Q3RSxLQUFLLENBQUN3QixRQUFRLEVBQ2R4QixLQUFLLENBQUM4RSxZQUFZLEVBQ2xCd0IsT0FDRixDQUFDO0lBSmlCSSxXQUFXLEdBQUFELHNCQUFBLENBQXRCaEcsU0FBUztJQUFlQyxNQUFNLEdBQUErRixzQkFBQSxDQUFOL0YsTUFBTTtFQUtyQzJGLFFBQVEsQ0FBQy9HLElBQUksQ0FBQUMsS0FBQSxDQUFiOEcsUUFBUSxNQUFBMUUsbUJBQUEsYUFBU2pCLE1BQU0sRUFBQztFQUN4QjtFQUNBLElBQUFpRyxxQkFBQSxHQUFtQ0MsdUJBQXVCLENBQ3hENUcsS0FBSyxDQUFDdUIsTUFBTSxFQUNabUYsV0FBVyxFQUNYMUcsS0FBSyxDQUFDc0QsVUFBVSxFQUNoQjZDLGtCQUNGLENBQUM7SUFMTVUsYUFBYSxHQUFBRixxQkFBQSxDQUFiRSxhQUFhO0lBQUVDLFNBQVMsR0FBQUgscUJBQUEsQ0FBVEcsU0FBUztFQU8vQixJQUFJQyxXQUFjLEdBQUF2SCxhQUFBLENBQUFBLGFBQUEsS0FDYlEsS0FBSztJQUNSdUIsTUFBTSxFQUFFdUYsU0FBUztJQUNqQnhELFVBQVUsRUFBRXVELGFBQWE7SUFDekJWLGtCQUFrQixFQUFsQkEsa0JBQWtCO0lBQ2xCYSxlQUFlLEtBQUF0RixNQUFBLEtBQUFDLG1CQUFBLGFBQU0zQixLQUFLLENBQUNnSCxlQUFlLEdBQUtYLFFBQVE7RUFBQyxFQUN6RDs7RUFFRDtFQUNBLElBQUlVLFdBQVcsQ0FBQ0Usb0JBQW9CLElBQUlGLFdBQVcsQ0FBQ3hGLE1BQU0sQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckUsSUFBTStKLFVBQVUsR0FBR0gsV0FBVyxDQUFDRSxvQkFBb0I7SUFDbkRGLFdBQVcsR0FBR0ksZUFBZSxDQUFDSixXQUFXLEVBQUVHLFVBQVUsQ0FBQztJQUN0RDtJQUNBLElBQUlILFdBQVcsQ0FBQ0MsZUFBZSxDQUFDN0osTUFBTSxHQUFHLENBQUMsRUFBRTtNQUMxQzRKLFdBQVcsR0FBQXZILGFBQUEsQ0FBQUEsYUFBQSxLQUFPdUgsV0FBVztRQUFFRSxvQkFBb0IsRUFBRUM7TUFBVSxFQUFDO0lBQ2xFO0VBQ0Y7RUFFQSxPQUFPSCxXQUFXO0FBQ3BCO0FBRU8sU0FBU0gsdUJBQXVCQSxDQUNyQ1EsYUFBYSxFQUNiQyxjQUFjLEVBQ2RDLFlBQVksRUFFWjtFQUFBLElBREE1RCxjQUF3QixHQUFBakUsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLEVBQUU7RUFFN0IsSUFBSSxFQUFDNEgsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRWxLLE1BQU0sR0FBRTtJQUMzQixPQUFPO01BQUMySixTQUFTLEVBQUVNLGFBQWE7TUFBRVAsYUFBYSxFQUFFUztJQUFZLENBQUM7RUFDaEU7RUFFQSxJQUFNQyxpQkFBaUIsR0FBR0QsWUFBWSxDQUNuQ25JLE1BQU0sQ0FBQyxVQUFBcUksS0FBSztJQUFBLE9BQUksT0FBT0EsS0FBSyxLQUFLLFFBQVE7RUFBQSxFQUFDLENBQzFDcEgsR0FBRyxDQUFDLFVBQUFFLEVBQUU7SUFBQSxPQUFJLElBQUFtSCxlQUFRLEVBQUNuSCxFQUFFLENBQUMsQ0FBQzhHLGFBQWEsQ0FBQztFQUFBLEVBQUMsQ0FDdENqSSxNQUFNLENBQUMsVUFBQXVJLEtBQUs7SUFBQSxPQUFJQyxPQUFPLENBQUNELEtBQUssQ0FBQztFQUFBLEVBQUM7RUFDbEMsSUFBTVosU0FBUyxHQUFHTSxhQUFhLENBQUMxRixNQUFNLENBQUMyRixjQUFjLENBQUM7RUFDdEQsSUFBTU8sa0JBQWtCLEdBQUcvRywrQkFBK0IsQ0FDeEQwRyxpQkFBaUIsRUFDakJGLGNBQWMsRUFDZDNELGNBQWMsRUFDZCxJQUNGLENBQUM7RUFFRCxJQUFNbUUsaUJBQWlCLEdBQUcsSUFBQXpCLG1DQUF1QixFQUFDd0Isa0JBQWtCLENBQUM7O0VBRXJFO0VBQ0EsSUFBTUUsU0FBUyxHQUFHUixZQUFZLENBQUNTLElBQUksQ0FBQyxVQUFBUCxLQUFLO0lBQUEsT0FBSSxJQUFBUSxvQkFBYSxFQUFDUixLQUFLLENBQUM7RUFBQSxFQUFDO0VBQ2xFLElBQUksQ0FBQ00sU0FBUyxFQUFFO0lBQ2QsT0FBTztNQUNMakIsYUFBYSxFQUFFZ0IsaUJBQWlCO01BQ2hDZixTQUFTLEVBQVRBO0lBQ0YsQ0FBQztFQUNIOztFQUVBO0VBQ0E7RUFDQTtFQUNBLElBQU1tQixlQUFlLEdBQUcsSUFBSUMsR0FBRyxDQUM3QlosWUFBWSxDQUFDbkksTUFBTSxDQUFDLFVBQUFxSSxLQUFLO0lBQUEsT0FBSSxPQUFPQSxLQUFLLEtBQUssUUFBUTtFQUFBLEVBQ3hELENBQUM7RUFDRCxJQUFNVyxjQUFjLEdBQUdOLGlCQUFpQixDQUFDMUksTUFBTSxDQUFDLFVBQUFtQixFQUFFO0lBQUEsT0FBSSxDQUFDMkgsZUFBZSxDQUFDRyxHQUFHLENBQUM5SCxFQUFFLENBQUM7RUFBQSxFQUFDOztFQUUvRTtFQUNBO0VBQ0EsSUFBTStILE1BQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFNQyxTQUFTLE9BQUEzRyxtQkFBQSxhQUFPa0csaUJBQWlCLENBQUMxSSxNQUFNLENBQUMsVUFBQW1CLEVBQUU7SUFBQSxPQUFJMkgsZUFBZSxDQUFDRyxHQUFHLENBQUM5SCxFQUFFLENBQUM7RUFBQSxFQUFDLENBQUM7RUFDOUUsSUFBSWlJLE9BQU8sR0FBRyxDQUFDO0VBQUMsSUFBQUMsVUFBQSxHQUFBOUwsMEJBQUEsQ0FFSTRLLFlBQVk7SUFBQW1CLE1BQUE7RUFBQTtJQUFoQyxLQUFBRCxVQUFBLENBQUFsTCxDQUFBLE1BQUFtTCxNQUFBLEdBQUFELFVBQUEsQ0FBQWpMLENBQUEsSUFBQUMsSUFBQSxHQUFrQztNQUFBLElBQXZCZ0ssS0FBSyxHQUFBaUIsTUFBQSxDQUFBaEwsS0FBQTtNQUNkLElBQUksSUFBQXVLLG9CQUFhLEVBQUNSLEtBQUssQ0FBQyxFQUFFO1FBQ3hCYSxNQUFNLENBQUMvSSxJQUFJLENBQUNrSSxLQUF3QixDQUFDO01BQ3ZDLENBQUMsTUFBTTtRQUNMO1FBQ0EsSUFBSWUsT0FBTyxHQUFHRCxTQUFTLENBQUNuTCxNQUFNLEVBQUU7VUFDOUJrTCxNQUFNLENBQUMvSSxJQUFJLENBQUNnSixTQUFTLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1VBQy9CQSxPQUFPLEVBQUU7UUFDWDtNQUNGO0lBQ0Y7O0lBRUE7RUFBQSxTQUFBOUQsR0FBQTtJQUFBK0QsVUFBQSxDQUFBNUwsQ0FBQSxDQUFBNkgsR0FBQTtFQUFBO0lBQUErRCxVQUFBLENBQUE5SyxDQUFBO0VBQUE7RUFDQSxPQUFPO0lBQ0xtSixhQUFhLEtBQUFuRixNQUFBLEtBQUFDLG1CQUFBLGFBQU13RyxjQUFjLEdBQUtFLE1BQU0sQ0FBQztJQUM3Q3ZCLFNBQVMsRUFBVEE7RUFDRixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ssZUFBZUEsQ0FDN0JuSCxLQUFRLEVBQ1IwSSxlQUF1QixFQUN2QnhJLFVBQW9CLEVBQ2pCO0VBQ0gsSUFBSSxDQUFDd0ksZUFBZSxJQUFJLENBQUMxTCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lMLGVBQWUsQ0FBQyxJQUFJQSxlQUFlLENBQUN2TCxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ3ZGLE9BQU82QyxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNOEgsU0FBUyxHQUFHWSxlQUFlLENBQUNYLElBQUksQ0FBQyxVQUFBUCxLQUFLO0lBQUEsT0FBSSxJQUFBUSxvQkFBYSxFQUFDUixLQUFLLENBQUM7RUFBQSxFQUFDO0VBQ3JFLElBQUksQ0FBQ00sU0FBUyxFQUFFO0lBQ2Q7SUFDQSxPQUFPOUgsS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBSUEsS0FBSyxDQUFDdUIsTUFBTSxDQUFDcEUsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM3QixPQUFBcUMsYUFBQSxDQUFBQSxhQUFBLEtBQ0tRLEtBQUs7TUFDUmlILG9CQUFvQixFQUFFeUI7SUFBZTtFQUV6Qzs7RUFFQTtFQUNBLElBQU1DLGFBQWEsR0FBRyxJQUFJVCxHQUFHLENBQUNsSSxLQUFLLENBQUN1QixNQUFNLENBQUNuQixHQUFHLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsRUFBRTtFQUFBLEVBQUMsQ0FBQzs7RUFFMUQ7RUFDQSxTQUFTc0ksZ0JBQWdCQSxDQUFDQyxLQUFZLEVBQWM7SUFDbEQsSUFBTVIsTUFBa0IsR0FBRyxFQUFFO0lBQUMsSUFBQVMsVUFBQSxHQUFBcE0sMEJBQUEsQ0FDVm1NLEtBQUs7TUFBQUUsTUFBQTtJQUFBO01BQXpCLEtBQUFELFVBQUEsQ0FBQXhMLENBQUEsTUFBQXlMLE1BQUEsR0FBQUQsVUFBQSxDQUFBdkwsQ0FBQSxJQUFBQyxJQUFBLEdBQTJCO1FBQUEsSUFBaEJnSyxLQUFLLEdBQUF1QixNQUFBLENBQUF0TCxLQUFBO1FBQ2QsSUFBSSxJQUFBdUssb0JBQWEsRUFBQ1IsS0FBSyxDQUFDLEVBQUU7VUFDeEIsSUFBTXdCLEtBQUssR0FBR3hCLEtBQXdCO1VBQ3RDLElBQU15QixrQkFBa0IsR0FBR0wsZ0JBQWdCLENBQUNJLEtBQUssQ0FBQzFGLFVBQVUsQ0FBQztVQUM3RDtVQUNBK0UsTUFBTSxDQUFDL0ksSUFBSSxDQUFBRSxhQUFBLENBQUFBLGFBQUEsS0FDTndKLEtBQUs7WUFDUjFGLFVBQVUsRUFBRTJGO1VBQWtCLEVBQy9CLENBQUM7UUFDSixDQUFDLE1BQU0sSUFBSSxPQUFPekIsS0FBSyxLQUFLLFFBQVEsSUFBSW1CLGFBQWEsQ0FBQ1AsR0FBRyxDQUFDWixLQUFLLENBQUMsRUFBRTtVQUNoRWEsTUFBTSxDQUFDL0ksSUFBSSxDQUFDa0ksS0FBSyxDQUFDO1FBQ3BCO01BQ0Y7SUFBQyxTQUFBL0MsR0FBQTtNQUFBcUUsVUFBQSxDQUFBbE0sQ0FBQSxDQUFBNkgsR0FBQTtJQUFBO01BQUFxRSxVQUFBLENBQUFwTCxDQUFBO0lBQUE7SUFDRCxPQUFPMkssTUFBTTtFQUNmO0VBRUEsSUFBTWEsa0JBQWtCLEdBQUdOLGdCQUFnQixDQUFDRixlQUFlLENBQUM7O0VBRTVEO0VBQ0E7RUFDQSxJQUFNUyxrQkFBa0IsR0FBRyxJQUFJakIsR0FBRyxDQUFTLENBQUM7RUFDNUMsU0FBU2tCLFVBQVVBLENBQUNQLEtBQVksRUFBRTtJQUFBLElBQUFRLFVBQUEsR0FBQTNNLDBCQUFBLENBQ1ptTSxLQUFLO01BQUFTLE1BQUE7SUFBQTtNQUF6QixLQUFBRCxVQUFBLENBQUEvTCxDQUFBLE1BQUFnTSxNQUFBLEdBQUFELFVBQUEsQ0FBQTlMLENBQUEsSUFBQUMsSUFBQSxHQUEyQjtRQUFBLElBQWhCZ0ssS0FBSyxHQUFBOEIsTUFBQSxDQUFBN0wsS0FBQTtRQUNkLElBQUksSUFBQXVLLG9CQUFhLEVBQUNSLEtBQUssQ0FBQyxFQUFFO1VBQ3hCNEIsVUFBVSxDQUFFNUIsS0FBSyxDQUFxQmxFLFVBQVUsQ0FBQztRQUNuRCxDQUFDLE1BQU0sSUFBSSxPQUFPa0UsS0FBSyxLQUFLLFFBQVEsRUFBRTtVQUNwQzJCLGtCQUFrQixDQUFDSSxHQUFHLENBQUMvQixLQUFLLENBQUM7UUFDL0I7TUFDRjtJQUFDLFNBQUEvQyxHQUFBO01BQUE0RSxVQUFBLENBQUF6TSxDQUFBLENBQUE2SCxHQUFBO0lBQUE7TUFBQTRFLFVBQUEsQ0FBQTNMLENBQUE7SUFBQTtFQUNIO0VBQ0EwTCxVQUFVLENBQUNGLGtCQUFrQixDQUFDOztFQUU5QjtFQUNBLElBQU1NLGFBQWEsR0FBR3hKLEtBQUssQ0FBQ3VCLE1BQU0sQ0FBQ3BDLE1BQU0sQ0FBQyxVQUFBa0IsQ0FBQztJQUFBLE9BQUksQ0FBQzhJLGtCQUFrQixDQUFDZixHQUFHLENBQUMvSCxDQUFDLENBQUNDLEVBQUUsQ0FBQztFQUFBLEVBQUMsQ0FBQ0YsR0FBRyxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLEVBQUU7RUFBQSxFQUFDO0VBRTVGLE9BQUFkLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO0lBQ1JzRCxVQUFVLEtBQUE1QixNQUFBLEtBQUFDLG1CQUFBLGFBQU02SCxhQUFhLE9BQUE3SCxtQkFBQSxhQUFLdUgsa0JBQWtCLEVBQUM7SUFDckRqQyxvQkFBb0IsRUFBRTtFQUFJO0FBRTlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3dDLGlCQUFpQkEsQ0FDL0J6SixLQUFRLEVBQ1IwSixxQkFBa0UsRUFDL0Q7RUFDSCxJQUFNQyxNQUE2QyxHQUFHLENBQUMsQ0FBQztFQUN4RCxJQUFNdEQsUUFBeUMsR0FBRyxDQUFDLENBQUM7RUFFcEQsSUFBSXFELHFCQUFxQixFQUFFO0lBQ3hCMUssTUFBTSxDQUFDQyxJQUFJLENBQUN5SyxxQkFBcUIsQ0FBQyxDQUF5Q2hLLE9BQU8sQ0FBQyxVQUFBa0ssR0FBRyxFQUFJO01BQ3pGLElBQUksQ0FBQzVKLEtBQUssQ0FBQzZKLGlCQUFpQixDQUFDRCxHQUFHLENBQUMsRUFBRTtRQUNqQztNQUNGO01BRUEsSUFBTUUsYUFBYSxHQUNqQkYsR0FBRyxLQUFLLFNBQVMsSUFBSUEsR0FBRyxLQUFLLE9BQU8sSUFBSUEsR0FBRyxLQUFLLFVBQVUsR0FDdEQ1SixLQUFLLENBQUM2SixpQkFBaUIsQ0FBQ0QsR0FBRyxDQUFDLENBQUN4RyxNQUFNLEdBQ25DLElBQUk7TUFFVixJQUFBMkcsS0FBQSxHQUFrQ0wscUJBQXFCLENBQUNFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUEzREksT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87UUFBS0MsV0FBVyxPQUFBdkgseUJBQUEsYUFBQXFILEtBQUEsRUFBQXZOLFNBQUE7TUFFOUIsSUFBSTBOLGFBQWEsR0FBR0QsV0FBVztNQUUvQixJQUFJTCxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ3JCLElBQUFPLHFCQUFBLEdBQXlDQyw2QkFBNkIsQ0FDcEVwSyxLQUFLLEVBQ0xpSyxXQUNGLENBQUM7VUFITUksYUFBYSxHQUFBRixxQkFBQSxDQUFiRSxhQUFhO1VBQUVDLGVBQWUsR0FBQUgscUJBQUEsQ0FBZkcsZUFBZTs7UUFLckM7UUFDQUosYUFBYSxHQUFHO1VBQ2RLLFlBQVksRUFBQS9LLGFBQUEsQ0FBQUEsYUFBQSxLQUNOc0ssYUFBYSxDQUEyQlMsWUFBWSxHQUNyREYsYUFBYTtRQUVwQixDQUFDO1FBRUQsSUFBSXJMLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcUwsZUFBZSxDQUFDLENBQUNuTixNQUFNLEVBQUU7VUFDdkM7VUFDQWtKLFFBQVEsQ0FBQ21FLE9BQU8sR0FBRztZQUFDRCxZQUFZLEVBQUVELGVBQWU7WUFBRU4sT0FBTyxFQUFFckMsT0FBTyxDQUFDcUMsT0FBTztVQUFDLENBQUM7UUFDL0U7TUFDRjtNQUVBTCxNQUFNLENBQUNDLEdBQUcsQ0FBQyxHQUFBcEssYUFBQSxDQUFBQSxhQUFBLEtBQ05RLEtBQUssQ0FBQzZKLGlCQUFpQixDQUFDRCxHQUFHLENBQUM7UUFDL0JJLE9BQU8sRUFBRXJDLE9BQU8sQ0FBQ3FDLE9BQU87TUFBQyxHQUNyQkYsYUFBYSxHQUNiO1FBQ0UxRyxNQUFNLEVBQUUsSUFBQXFILGdCQUFJLEVBQUFqTCxhQUFBLENBQUFBLGFBQUEsS0FFTHNLLGFBQWEsR0FDYkksYUFBYSxHQUVsQmxMLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNkssYUFBYSxDQUMzQjtNQUNGLENBQUMsR0FDRCxDQUFDLENBQUMsQ0FDUDtJQUNILENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTVksU0FBUyxHQUFBbEwsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZRLEtBQUs7SUFDUjZKLGlCQUFpQixFQUFBckssYUFBQSxDQUFBQSxhQUFBLEtBQ1pRLEtBQUssQ0FBQzZKLGlCQUFpQixHQUN2QkYsTUFBTSxDQUNWO0lBQ0RELHFCQUFxQixFQUFFaUIsd0JBQXdCLENBQUMzSyxLQUFLLEVBQUVxRyxRQUFRO0VBQUMsRUFDakU7RUFDRCxPQUFPcUUsU0FBUztBQUNsQjtBQUVBLFNBQVNFLHlCQUF5QkEsQ0FBQ0MsT0FBaUMsRUFBMEI7RUFDNUYsSUFBTUMsUUFBUSxHQUFBdEwsYUFBQSxLQUFPcUwsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDO0VBQ0E7RUFBQSxJQUFBRSxNQUFBLFlBQUFBLE9BQUFuQixHQUFBLEVBRTRCO0lBQzFCLElBQU1vQixpQkFBaUIsR0FBR0gsT0FBTyxDQUFDekssR0FBRyxDQUFDLFVBQUE2SyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDckIsR0FBRyxDQUFDO0lBQUEsRUFBQzs7SUFFbEQ7SUFDQWtCLFFBQVEsQ0FBQ2xCLEdBQUcsQ0FBQyxHQUFHO01BQ2Q7TUFDQUksT0FBTyxFQUFFZ0IsaUJBQWlCLENBQUNqRCxJQUFJLENBQUMsVUFBQW1ELENBQUM7UUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRWxCLE9BQU87TUFBQTtJQUNqRCxDQUFDO0lBRUQsSUFBSUosR0FBRyxLQUFLLFNBQVMsRUFBRTtNQUNyQjtNQUNBa0IsUUFBUSxDQUFDbEIsR0FBRyxDQUFDLENBQUN1QixXQUFXLEdBQUdILGlCQUFpQixDQUFDakQsSUFBSSxDQUFDLFVBQUFtRCxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxhQUFEQSxDQUFDLHVCQUFEQSxDQUFDLENBQUVDLFdBQVc7TUFBQSxFQUFDOztNQUV2RTtNQUNBTCxRQUFRLENBQUNsQixHQUFHLENBQUMsQ0FBQ3dCLFdBQVcsR0FBR0MsNkJBQTZCLENBQ3ZETCxpQkFBaUIsQ0FBQzVLLEdBQUcsQ0FBQyxVQUFBOEssQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ0UsV0FBVztNQUFBLEVBQzFDLENBQUM7O01BRUQ7TUFDQU4sUUFBUSxDQUFDbEIsR0FBRyxDQUFDLENBQUNXLFlBQVksR0FBR1MsaUJBQWlCLENBQzNDNUssR0FBRyxDQUFDLFVBQUE4SyxDQUFDO1FBQUEsT0FBSUEsQ0FBQyxDQUFDWCxZQUFZO01BQUEsRUFBQyxDQUN4QmUsTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsZ0JBQWdCLEVBQUs7UUFBQSxJQUFBQyxNQUFBLFlBQUFBLE9BQUFDLGFBQUEsRUFDYTtVQUM1QyxJQUFNQyxpQkFBaUIsR0FBR0gsZ0JBQWdCLENBQUNFLGFBQWEsQ0FBQztVQUN6RCxJQUFJLENBQUNILEdBQUcsQ0FBQ0csYUFBYSxDQUFDLEVBQUU7WUFDdkI7WUFDQTtZQUNBSCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxHQUFHQyxpQkFBaUI7VUFDeEMsQ0FBQyxNQUFNO1lBQ0w7WUFDQTtZQUNBO1lBQ0FBLGlCQUFpQixDQUFDak0sT0FBTyxDQUFDLFVBQUFrTSxNQUFNLEVBQUk7Y0FDbEMsSUFBSSxDQUFDTCxHQUFHLENBQUNHLGFBQWEsQ0FBQyxDQUFDRyxJQUFJLENBQUMsVUFBQUMsS0FBQTtnQkFBQSxJQUFFek4sSUFBSSxHQUFBeU4sS0FBQSxDQUFKek4sSUFBSTtnQkFBQSxPQUFNdU4sTUFBTSxDQUFDdk4sSUFBSSxLQUFLQSxJQUFJO2NBQUEsRUFBQyxFQUFFO2dCQUM5RGtOLEdBQUcsQ0FBQ0csYUFBYSxDQUFDLENBQUNwTSxJQUFJLENBQUNzTSxNQUFNLENBQUM7Y0FDakM7WUFDRixDQUFDLENBQUM7VUFDSjtRQUNGLENBQUM7UUFoQkQsS0FBSyxJQUFNRixhQUFhLElBQUlGLGdCQUFnQjtVQUFBQyxNQUFBLENBQUFDLGFBQUE7UUFBQTtRQWlCNUMsT0FBT0gsR0FBRztNQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWO0lBRUEsSUFBSTNCLEdBQUcsS0FBSyxPQUFPLEVBQUU7TUFBQSxJQUFBbUMsVUFBQTtNQUNuQjtNQUNBakIsUUFBUSxDQUFDbEIsR0FBRyxDQUFDLENBQUNvQyxJQUFJLElBQUFELFVBQUEsR0FDaEIsSUFBQUUsZ0JBQVMsRUFBQ2pCLGlCQUFpQixFQUFFa0IsNEJBQWlCLENBQUNDLE9BQU8sRUFBRSxVQUFBakIsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQ2MsSUFBSTtNQUFBLEVBQUMsY0FBQUQsVUFBQSxjQUFBQSxVQUFBLEdBQUksSUFBSTtJQUNoRjtJQUVBLElBQUluQyxHQUFHLEtBQUssVUFBVSxFQUFFO01BQ3RCa0IsUUFBUSxDQUFDbEIsR0FBRyxDQUFDLENBQUN3QyxXQUFXLEdBQUdwQixpQkFBaUIsQ0FBQ2pELElBQUksQ0FBQyxVQUFBbUQsQ0FBQztRQUFBLE9BQUlBLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFa0IsV0FBVztNQUFBLEVBQUM7SUFDekU7RUFDRixDQUFDO0VBcERELEtBQUssSUFBTXhDLEdBQUcsSUFBSWtCLFFBQVE7SUFBQUMsTUFBQSxDQUFBbkIsR0FBQTtFQUFBO0VBc0QxQixPQUFPa0IsUUFBUTtBQUNqQjtBQUVBLFNBQVNILHdCQUF3QkEsQ0FDL0IzSyxLQUFRLEVBQ1JxRyxRQUF5QyxFQUN6QztFQUFBLElBQUFnRyxpQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxrQkFBQTtFQUNBLElBQUksRUFBQ25HLFFBQVEsYUFBUkEsUUFBUSxnQkFBQWdHLGlCQUFBLEdBQVJoRyxRQUFRLENBQUVtRSxPQUFPLGNBQUE2QixpQkFBQSxlQUFqQkEsaUJBQUEsQ0FBbUI5QixZQUFZLEdBQUU7SUFDcEMsT0FBT3ZLLEtBQUssQ0FBQzBKLHFCQUFxQjtFQUNwQztFQUNBLE9BQU87SUFDTGMsT0FBTyxFQUFBaEwsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDRlEsS0FBSyxDQUFDMEoscUJBQXFCLENBQUNjLE9BQU8sR0FDbEMsUUFBT25FLFFBQVEsYUFBUkEsUUFBUSxnQkFBQWlHLGtCQUFBLEdBQVJqRyxRQUFRLENBQUVtRSxPQUFPLGNBQUE4QixrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CdEMsT0FBTyxNQUFLLFNBQVMsR0FDL0M7TUFBQ0EsT0FBTyxFQUFFM0QsUUFBUSxDQUFDbUUsT0FBTyxDQUFDUjtJQUFPLENBQUMsR0FDbkMsQ0FBQyxDQUFDO01BQ05PLFlBQVksRUFBQS9LLGFBQUEsQ0FBQUEsYUFBQSxNQUFBK00scUJBQUEsR0FDUHZNLEtBQUssQ0FBQzBKLHFCQUFxQixjQUFBNkMscUJBQUEsZ0JBQUFBLHFCQUFBLEdBQTNCQSxxQkFBQSxDQUE2Qi9CLE9BQU8sY0FBQStCLHFCQUFBLHVCQUFwQ0EscUJBQUEsQ0FBc0NoQyxZQUFZLEdBQ2xEbEUsUUFBUSxhQUFSQSxRQUFRLGdCQUFBbUcsa0JBQUEsR0FBUm5HLFFBQVEsQ0FBRW1FLE9BQU8sY0FBQWdDLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJqQyxZQUFZO0lBQ25DO0VBRUwsQ0FBQztBQUNIO0FBRUEsU0FBU2tDLDRCQUE0QkEsQ0FBQzVDLGlCQUFpQixFQUFFekksTUFBYyxFQUFFc0wsZUFBdUIsRUFBRTtFQUFBLElBQUFDLHFCQUFBO0VBQ2hHLElBQUk5QyxpQkFBaUIsYUFBakJBLGlCQUFpQixnQkFBQThDLHFCQUFBLEdBQWpCOUMsaUJBQWlCLENBQUVXLE9BQU8sY0FBQW1DLHFCQUFBLGVBQTFCQSxxQkFBQSxDQUE0QnBDLFlBQVksQ0FBQ25KLE1BQU0sQ0FBQyxFQUFFO0lBQUEsSUFBQXdMLHNCQUFBO0lBQ3BELE9BQUFwTixhQUFBLENBQUFBLGFBQUEsS0FDS3FLLGlCQUFpQjtNQUNwQlcsT0FBTyxFQUFBaEwsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZxSyxpQkFBaUIsQ0FBQ1csT0FBTztRQUM1QkQsWUFBWSxNQUFBNUssZ0JBQUEsaUJBQ1QrTSxlQUFlLEVBQUc3QyxpQkFBaUIsYUFBakJBLGlCQUFpQixnQkFBQStDLHNCQUFBLEdBQWpCL0MsaUJBQWlCLENBQUVXLE9BQU8sY0FBQW9DLHNCQUFBLHVCQUExQkEsc0JBQUEsQ0FBNEJyQyxZQUFZLENBQUNuSixNQUFNLENBQUM7TUFDcEU7SUFDRjtFQUVMO0VBQ0EsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeUwsY0FBY0EsQ0FDNUI3TSxLQUFRLEVBRUw7RUFBQSxJQURIOE0sU0FBNkQsR0FBQXJOLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBRWxFLElBQU1rSyxNQUFNLE9BQUFoSSxtQkFBQSxhQUFPM0IsS0FBSyxDQUFDOE0sU0FBUyxDQUFDO0VBQ25DLElBQU16RyxRQUFRLEdBQUcsRUFBRTtFQUNuQnlHLFNBQVMsQ0FBQ3BOLE9BQU8sQ0FBQyxVQUFDcU4sRUFBRSxFQUFFdE8sQ0FBQyxFQUFLO0lBQzNCLElBQU11TyxPQUFPLEdBQUdoTyxNQUFNLENBQUNnTyxPQUFPLENBQUNELEVBQUUsQ0FBQ3hMLE1BQU0sQ0FBQztJQUN6QyxJQUFJeUwsT0FBTyxDQUFDN1AsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0QjZQLE9BQU8sQ0FBQ3ROLE9BQU8sQ0FBQyxVQUFBdU4sS0FBQSxFQUFpQjtRQUFBLElBQUFDLEtBQUEsT0FBQUMsZUFBQSxhQUFBRixLQUFBO1VBQWYzTSxFQUFFLEdBQUE0TSxLQUFBO1VBQUV6UCxLQUFLLEdBQUF5UCxLQUFBO1FBQ3pCO1FBQ0EsSUFBTUUsTUFBTSxHQUFHcE4sS0FBSyxDQUFDdUIsTUFBTSxDQUFDc0ssSUFBSSxDQUFDLFVBQUF4TCxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFLEtBQUtBLEVBQUU7UUFBQSxFQUFDLEdBQUdxSixNQUFNLEdBQUd0RCxRQUFROztRQUV0RTtRQUNBK0csTUFBTSxDQUFDM08sQ0FBQyxDQUFDLEdBQUcyTyxNQUFNLENBQUMzTyxDQUFDLENBQUMsSUFBQWUsYUFBQSxDQUFBQSxhQUFBLEtBRWhCdU4sRUFBRTtVQUNMeEwsTUFBTSxFQUFFNkwsTUFBTSxLQUFLekQsTUFBTSxHQUFHLElBQUEwRCxxQ0FBOEIsRUFBQ3JOLEtBQUssQ0FBQ3VCLE1BQU0sQ0FBQyxHQUFHO1FBQUUsRUFDOUU7UUFDRDZMLE1BQU0sQ0FBQzNPLENBQUMsQ0FBQyxDQUFDOEMsTUFBTSxHQUFBL0IsYUFBQSxDQUFBQSxhQUFBLEtBQ1g0TixNQUFNLENBQUMzTyxDQUFDLENBQUMsQ0FBQzhDLE1BQU0sV0FBQTVCLGdCQUFBLGlCQUNsQlcsRUFBRSxFQUFHN0MsS0FBSyxFQUNaO01BQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNO01BQ0w7TUFDQWtNLE1BQU0sQ0FBQ3JLLElBQUksQ0FBQ3lOLEVBQUUsQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQUF2TixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSOE0sU0FBUyxFQUFFbkQsTUFBTTtJQUNqQjJELG1CQUFtQixLQUFBNUwsTUFBQSxLQUFBQyxtQkFBQSxhQUFNM0IsS0FBSyxDQUFDc04sbUJBQW1CLEdBQUtqSCxRQUFRO0VBQUM7QUFFcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU2tILFlBQVlBLENBQzFCdk4sS0FBUSxFQUNSNEYsT0FBeUQsRUFDekQxRixVQUFvQixFQUNqQjtFQUNILElBQU1zTixVQUFVLE1BQUE5TCxNQUFBLEtBQUFDLG1CQUFBLGFBQ1gzQixLQUFLLENBQUM0RixPQUFPLE9BQUFqRSxtQkFBQSxhQUNiLENBQUNpRSxPQUFPLElBQUksRUFBRSxFQUNkeEYsR0FBRyxDQUFDLFVBQUFxTixNQUFNLEVBQUk7SUFDYixPQUFPdk4sVUFBVSxHQUNiLElBQUF3TixxQkFBWSxFQUNWQyxxQkFBUyxDQUFDQyxHQUFHLENBQUMsQ0FDWkgsTUFBTSxFQUNOO01BQ0U7TUFDQUksY0FBYyxFQUFFO0lBQ2xCLENBQUMsQ0FDRixDQUNILENBQUMsR0FDQUosTUFBcUI7RUFDNUIsQ0FBQyxDQUFDLENBQ0R0TyxNQUFNLENBQUMsVUFBQXNPLE1BQU0sRUFBSTtJQUNoQixPQUFPOUYsT0FBTyxDQUFDOEYsTUFBTSxJQUFJQSxNQUFNLENBQUNLLGFBQWEsQ0FBQyxDQUFDLENBQUM7RUFDbEQsQ0FBQyxDQUFDLEVBQ0w7RUFDRCxPQUFBdE8sYUFBQSxDQUFBQSxhQUFBLEtBQ0tRLEtBQUs7SUFDUjRGLE9BQU8sRUFBRTRILFVBQVU7SUFDbkIzSCxXQUFXLEVBQUUySCxVQUFVLENBQUNwTixHQUFHLENBQUMsVUFBQXFOLE1BQU07TUFBQSxPQUFJQSxNQUFNLENBQUNuTixFQUFFO0lBQUE7RUFBQztBQUVwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeU4sZ0JBQWdCQSxDQUFxQi9OLEtBQVEsRUFBRWdPLFdBQWtCLEVBQUs7RUFDcEYsSUFBSSxDQUFDQSxXQUFXLElBQUksQ0FBQ0EsV0FBVyxDQUFDN1EsTUFBTSxFQUFFO0lBQ3ZDLE9BQU82QyxLQUFLO0VBQ2Q7RUFDQSxJQUFNaU8sV0FBVyxHQUFHLElBQUkvRixHQUFHLENBQUNsSSxLQUFLLENBQUNnTyxXQUFXLENBQUM1TixHQUFHLENBQUMsVUFBQXZDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN5QyxFQUFFO0VBQUEsRUFBQyxDQUFDO0VBQzdELElBQU00TixnQkFBZ0IsR0FBR0YsV0FBVyxDQUNqQzdPLE1BQU0sQ0FDTCxVQUFBdEIsQ0FBQztJQUFBLE9BQ0NBLENBQUMsSUFDREEsQ0FBQyxDQUFDeUMsRUFBRSxJQUNKLENBQUMyTixXQUFXLENBQUM3RixHQUFHLENBQUN2SyxDQUFDLENBQUN5QyxFQUFFLENBQUMsSUFDdEIsSUFBQTZOLDJCQUFnQixFQUFDdFEsQ0FBQyxDQUFDdVEsSUFBSSxDQUFDLElBQ3hCcFIsS0FBSyxDQUFDQyxPQUFPLENBQUNZLENBQUMsQ0FBQ3dRLFdBQVcsQ0FBQyxLQUMzQnhRLENBQUMsQ0FBQ3dRLFdBQVcsQ0FBQ2xSLE1BQU0sS0FBSyxDQUFDLElBQUlVLENBQUMsQ0FBQ3dRLFdBQVcsQ0FBQ2xSLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFDMURVLENBQUMsQ0FBQ3dRLFdBQVcsQ0FBQ0MsS0FBSyxDQUFDLFVBQUE3USxLQUFLO01BQUEsT0FBSXFCLE1BQU0sQ0FBQ3lQLFFBQVEsQ0FBQzlRLEtBQUssQ0FBQztJQUFBLEVBQUM7RUFBQSxDQUN4RCxDQUFDLENBQ0EyQyxHQUFHLENBQUMsVUFBQXZDLENBQUM7SUFBQSxPQUFBMkIsYUFBQTtNQUNKZ1AsU0FBUyxFQUFFLElBQUk7TUFDZkMsUUFBUSxFQUFFLElBQUk7TUFDZEMsU0FBUyxFQUFFLElBQUk7TUFDZkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsU0FBUyxFQUFFQyx3Q0FBNkI7TUFDeENDLFNBQVMsRUFBRUMsd0NBQTZCO01BQ3hDQyxTQUFTLEVBQUUsQ0FBQztNQUNaQyxVQUFVLEVBQUU7SUFBQyxHQUNWcFIsQ0FBQztFQUFBLENBQ0osQ0FBQztFQUNMLElBQUksQ0FBQ3FRLGdCQUFnQixDQUFDL1EsTUFBTSxFQUFFO0lBQzVCLE9BQU82QyxLQUFLO0VBQ2Q7RUFDQSxPQUFBUixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSZ08sV0FBVyxLQUFBdE0sTUFBQSxLQUFBQyxtQkFBQSxhQUFNM0IsS0FBSyxDQUFDZ08sV0FBVyxPQUFBck0sbUJBQUEsYUFBS3VNLGdCQUFnQjtFQUFDO0FBRTVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTOUQsNkJBQTZCQSxDQUMzQ3BLLEtBQWUsRUFFZjtFQUFBLElBREFrUCxhQUFpRSxHQUFBelAsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLElBQUk7RUFFeEUsSUFBTTZLLGVBQXNELEdBQUcsQ0FBQyxDQUFDO0VBQ2pFLElBQU1ELGFBQW9ELEdBQUcsQ0FBQyxDQUFDO0VBRS9ELElBQ0UsQ0FBQzZFLGFBQWEsSUFDZCxDQUFDQSxhQUFhLENBQUMzRSxZQUFZLElBQzNCLENBQUN2TCxNQUFNLENBQUNDLElBQUksQ0FBQ2lRLGFBQWEsQ0FBQzNFLFlBQVksQ0FBQyxDQUFDcE4sTUFBTSxFQUMvQztJQUNBLE9BQU87TUFBQ2tOLGFBQWEsRUFBYkEsYUFBYTtNQUFFQyxlQUFlLEVBQWZBO0lBQWUsQ0FBQztFQUN6QztFQUFDLElBQUE2RSxNQUFBLFlBQUFBLE9BQUEsRUFFZ0Q7SUFDL0MsSUFBSSxDQUFDblAsS0FBSyxDQUFDd0IsUUFBUSxDQUFDSixNQUFNLENBQUMsSUFBSXBCLEtBQUssQ0FBQ3dHLGlCQUFpQixDQUFDcEYsTUFBTSxDQUFDLEVBQUU7TUFDOUQ7TUFDQWtKLGVBQWUsQ0FBQ2xKLE1BQU0sQ0FBQyxHQUFHOE4sYUFBYSxDQUFDM0UsWUFBWSxDQUFDbkosTUFBTSxDQUFDO0lBQzlELENBQUMsTUFBTTtNQUNMO01BQ0EsSUFBTWdPLFNBQVMsR0FBR3BQLEtBQUssQ0FBQ3dCLFFBQVEsQ0FBQ0osTUFBTSxDQUFDLENBQUNpTyxNQUFNLENBQUNqUCxHQUFHLENBQUMsVUFBQStCLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUM5RCxJQUFJO01BQUEsRUFBQztNQUNoRSxJQUFNaVIsaUJBQWlCLEdBQUdKLGFBQWEsQ0FBQzNFLFlBQVksQ0FBQ25KLE1BQU0sQ0FBQyxDQUFDakMsTUFBTSxDQUFDLFVBQUFvUSxLQUFLO1FBQUEsT0FDdkVILFNBQVMsQ0FBQ3BOLFFBQVEsQ0FBQ3VOLEtBQUssQ0FBQ2xSLElBQUksQ0FBQztNQUFBLENBQ2hDLENBQUM7TUFFRGdNLGFBQWEsQ0FBQ2pKLE1BQU0sQ0FBQyxHQUFHa08saUJBQWlCO0lBQzNDO0VBQ0YsQ0FBQztFQWJELEtBQUssSUFBTWxPLE1BQU0sSUFBSThOLGFBQWEsQ0FBQzNFLFlBQVk7SUFBQTRFLE1BQUE7RUFBQTtFQWUvQyxPQUFPO0lBQUM5RSxhQUFhLEVBQWJBLGFBQWE7SUFBRUMsZUFBZSxFQUFmQTtFQUFlLENBQUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNrRixrQkFBa0JBLENBQ2hDeFAsS0FBUSxFQUNSeVAsYUFBcUUsRUFDbEU7RUFDSCxJQUFJQSxhQUFhLElBQUlDLDBCQUFlLENBQUNELGFBQWEsQ0FBQyxFQUFFO0lBQ25ELE9BQUFqUSxhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztNQUNSeVAsYUFBYSxFQUFiQTtJQUFhO0VBRWpCO0VBRUEsT0FBT3pQLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMyUCwyQkFBMkJBLENBQUM5RSxPQUFpQixFQUFpQjtFQUNyRTtFQUNBLE9BQU9RLDZCQUE2QixDQUFDUixPQUFPLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBUytFLG9CQUFvQkEsQ0FDbEM1UCxLQUFRLEVBQ1I2UCxlQUF5RSxFQUN0RTtFQUNILElBQUlBLGVBQWUsSUFBSUMsNEJBQWlCLENBQUNELGVBQWUsQ0FBQyxFQUFFO0lBQ3pELE9BQUFyUSxhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztNQUNSNlAsZUFBZSxFQUFmQTtJQUFlO0VBRW5CO0VBRUEsT0FBTzdQLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMrUCw2QkFBNkJBLENBQUNsRixPQUFpQixFQUFpQjtFQUN2RTtFQUNBLE9BQU9RLDZCQUE2QixDQUFDUixPQUFPLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU21GLG9CQUFvQkEsQ0FDbENoUSxLQUFRLEVBQ1JpUSxTQUFtRSxFQUNoRTtFQUNILElBQUlBLFNBQVMsSUFBSUEsU0FBUyxDQUFDQyxXQUFXLEVBQUU7SUFDdEMsT0FBQTFRLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUSxLQUFLO01BQ1JtUSxlQUFlLEVBQUEzUSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNWUSxLQUFLLENBQUNtUSxlQUFlLEdBQ3JCRixTQUFTO1FBQ1pHLE1BQU0sRUFBRTtNQUFJO0lBQ2I7RUFFTDtFQUVBLE9BQU9wUSxLQUFLO0FBQ2Q7QUFFQSxTQUFTcVEsdUJBQXVCQSxDQUFDeEYsT0FBK0IsRUFBd0I7RUFBQSxJQUFBeUYsV0FBQSxFQUFBQyxXQUFBO0VBQ3RGO0VBQ0EsT0FBTztJQUNMTCxXQUFXLEdBQUFJLFdBQUEsR0FBRSxJQUFBckUsZ0JBQVMsRUFBQ3BCLE9BQU8sRUFBRXFCLDRCQUFpQixDQUFDc0UsT0FBTyxFQUFFLFVBQUF2RixDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDaUYsV0FBVztJQUFBLEVBQUMsY0FBQUksV0FBQSxjQUFBQSxXQUFBLEdBQUksSUFBSTtJQUN0RkcsS0FBSyxHQUFBRixXQUFBLEdBQUUsSUFBQXRFLGdCQUFTLEVBQUNwQixPQUFPLEVBQUVxQiw0QkFBaUIsQ0FBQ3NFLE9BQU8sRUFBRSxVQUFBdkYsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3dGLEtBQUs7SUFBQSxFQUFDLGNBQUFGLFdBQUEsY0FBQUEsV0FBQSxHQUFJO0VBQ3hFLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTRyx5QkFBeUJBLENBQ3ZDckIsTUFBNkIsRUFNN0I7RUFBQSxJQUxBc0IsU0FFQyxHQUFBbFIsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUFBLElBQ05tUixTQUF1QixHQUFBblIsU0FBQSxDQUFBdEMsTUFBQSxPQUFBc0MsU0FBQSxNQUFBa0UsU0FBQTtFQUFBLElBQ3ZCa04sT0FBaUMsR0FBQXBSLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFdEM7RUFDQSxJQUFNcVIsT0FBeUIsR0FBRyxDQUFDLENBQUM7RUFBQyxJQUFBQyxNQUFBLFlBQUFBLE9BQUEsRUFDSztJQUFyQyxJQUFNbkgsR0FBRyxHQUFBb0gsWUFBQSxDQUFBQyxFQUFBO0lBQ1pILE9BQU8sQ0FBQ2xILEdBQUcsQ0FBQyxHQUFBcEssYUFBQSxLQUFPb1IsU0FBUyxDQUFDaEgsR0FBRyxDQUFDLENBQUM7SUFFbEMsSUFBTXNILEtBQUssR0FBR1AsU0FBUyxDQUFDL0csR0FBRyxDQUFDO0lBQzVCLElBQUlzSCxLQUFLLEVBQUU7TUFDVCxJQUFNQyxRQUFRLEdBQUc5QixNQUFNLENBQUM5SyxTQUFTLENBQUMsVUFBQTZNLEtBQUE7UUFBQSxJQUFFL1MsSUFBSSxHQUFBK1MsS0FBQSxDQUFKL1MsSUFBSTtRQUFBLE9BQU1BLElBQUksS0FBSzZTLEtBQUs7TUFBQSxFQUFDO01BRTdELElBQUlDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNqQjtRQUNBTCxPQUFPLENBQUNsSCxHQUFHLENBQUMsQ0FBQ3VILFFBQVEsR0FBR0EsUUFBUTtRQUNoQ0wsT0FBTyxDQUFDbEgsR0FBRyxDQUFDLENBQUNuTSxLQUFLLEdBQUd5VCxLQUFLO01BQzVCO0lBQ0Y7RUFDRixDQUFDO0VBYkQsU0FBQUQsRUFBQSxNQUFBRCxZQUFBLEdBQWtCaFMsTUFBTSxDQUFDQyxJQUFJLENBQUMyUixTQUFTLENBQUMsRUFBQUssRUFBQSxHQUFBRCxZQUFBLENBQUE3VCxNQUFBLEVBQUE4VCxFQUFBO0lBQUFGLE1BQUE7RUFBQTs7RUFleEM7RUFDQSxJQUFNTSxXQUFXLEdBQUdyUyxNQUFNLENBQUNDLElBQUksQ0FBQzZSLE9BQU8sQ0FBQyxDQUFDeEMsS0FBSyxDQUFDLFVBQUExRSxHQUFHO0lBQUEsT0FDaEQwSCxjQUFjLENBQUNSLE9BQU8sQ0FBQ2xILEdBQUcsQ0FBQyxFQUFFa0gsT0FBTyxFQUFFekIsTUFBTSxDQUFDO0VBQUEsQ0FDL0MsQ0FBQztFQUVELElBQU1rQyxFQUFFLEdBQUdGLFdBQVcsR0FBR1AsT0FBTyxHQUFHLElBQUk7RUFDdkMsSUFBSUQsT0FBTyxDQUFDVyxZQUFZLEVBQUU7SUFDeEIsSUFBTUMsZUFBZSxHQUFHelMsTUFBTSxDQUFDQyxJQUFJLENBQUMyUixTQUFTLENBQUMsQ0FBQ3pSLE1BQU0sQ0FBQyxVQUFBdVMsQ0FBQztNQUFBLE9BQUksQ0FBQ2QsU0FBUyxDQUFDYyxDQUFDLENBQUMsQ0FBQ0MsUUFBUTtJQUFBLEVBQUM7SUFDbEYsSUFBTUMsY0FBYyxHQUFHSCxlQUFlLENBQUN0UyxNQUFNLENBQUMsVUFBQXVTLENBQUM7TUFBQSxPQUFJLEVBQUNaLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUdZLENBQUMsQ0FBQyxDQUFDalUsS0FBSztJQUFBLEVBQUM7SUFDdkUsSUFBSW1VLGNBQWMsQ0FBQ3pVLE1BQU0sRUFBRTtNQUN6QixNQUFNLElBQUkwVSxLQUFLLDBDQUFBblEsTUFBQSxDQUEwQ2tRLGNBQWMsQ0FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFFLENBQUM7SUFDdkY7SUFDQSxJQUFNQyxhQUFhLEdBQUcvUyxNQUFNLENBQUNDLElBQUksQ0FBQzBSLFNBQVMsQ0FBQztJQUM1QyxJQUFNcUIsY0FBYyxHQUFHRCxhQUFhLENBQUM1UyxNQUFNLENBQUMsVUFBQXVTLENBQUM7TUFBQSxJQUFBTyxVQUFBO01BQUEsT0FBSSxFQUFDbkIsT0FBTyxhQUFQQSxPQUFPLGdCQUFBbUIsVUFBQSxHQUFQbkIsT0FBTyxDQUFHWSxDQUFDLENBQUMsY0FBQU8sVUFBQSxlQUFaQSxVQUFBLENBQWN4VSxLQUFLO0lBQUEsRUFBQztJQUN0RSxJQUFJdVUsY0FBYyxDQUFDN1UsTUFBTSxFQUFFO01BQ3pCLE1BQU0sSUFBSTBVLEtBQUssK0JBQUFuUSxNQUFBLENBQStCc1EsY0FBYyxDQUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUUsQ0FBQztJQUM1RTtFQUNGO0VBRUEsT0FBT1AsRUFBRTtBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNELGNBQWNBLENBQzVCWSxNQUF5RCxFQUN6RHBCLE9BQXFCLEVBQ3JCMUIsU0FBZ0MsRUFDdkI7RUFDVCxJQUFJOEMsTUFBTSxDQUFDUCxRQUFRLElBQUlPLE1BQU0sQ0FBQ3pVLEtBQUssRUFBRTtJQUNuQyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQUl5VSxNQUFNLENBQUNDLFNBQVMsRUFBRTtJQUNwQixPQUFPRCxNQUFNLENBQUNDLFNBQVMsQ0FBQ0QsTUFBTSxFQUFFcEIsT0FBTyxFQUFFMUIsU0FBUyxDQUFDO0VBQ3JEO0VBQ0EsT0FBTyxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2dELHNCQUFzQkEsQ0FDcEMvQyxNQUFNLEVBQUFnRCxLQUFBLEVBRU5DLGNBQWMsRUFFZDtFQUFBLElBQUFDLEtBQUEsT0FBQXBGLGVBQUEsYUFBQWtGLEtBQUE7SUFIQ0csY0FBYyxHQUFBRCxLQUFBO0VBQUEsSUFFZjFCLE9BQWlDLEdBQUFwUixTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXRDLElBQU1nVCxlQUFlLEdBQUd6VixLQUFLLENBQUNDLE9BQU8sQ0FBQ3FWLGNBQWMsQ0FBQyxHQUFHQSxjQUFjLEdBQUcsQ0FBQ0EsY0FBYyxDQUFDOztFQUV6RjtFQUNBLE9BQU9HLGVBQWUsQ0FBQ3JTLEdBQUcsQ0FBQyxVQUFBc1MsU0FBUyxFQUFJO0lBQ3RDLElBQU1uRCxLQUFLLEdBQUdtRCxTQUFTLENBQUNuRCxLQUFLLEdBQ3pCRixNQUFNLENBQUN4RCxJQUFJLENBQUMsVUFBQThHLEVBQUU7TUFBQSxPQUNaM1QsTUFBTSxDQUFDQyxJQUFJLENBQUN5VCxTQUFTLENBQUNuRCxLQUFLLENBQUMsQ0FBQ2pCLEtBQUssQ0FBQyxVQUFBMUUsR0FBRztRQUFBLE9BQUk4SSxTQUFTLENBQUNuRCxLQUFLLENBQUMzRixHQUFHLENBQUMsS0FBSytJLEVBQUUsQ0FBQy9JLEdBQUcsQ0FBQztNQUFBLEVBQUM7SUFBQSxDQUM3RSxDQUFDLEdBQ0QsSUFBSTtJQUVSLElBQUkyRixLQUFLLEtBQUs1TCxTQUFTLElBQUlrTixPQUFPLENBQUNXLFlBQVksRUFBRTtNQUMvQyxNQUFNLElBQUlLLEtBQUssd0NBQUFuUSxNQUFBLENBQXdDa1IsSUFBSSxDQUFDQyxTQUFTLENBQUNILFNBQVMsQ0FBQ25ELEtBQUssQ0FBQyxDQUFFLENBQUM7SUFDM0Y7SUFFQSxPQUFPdlEsTUFBTSxDQUFDQyxJQUFJLENBQUN1VCxjQUFjLENBQUMsQ0FBQ2xILE1BQU0sQ0FDdkMsVUFBQ3dILElBQUksRUFBRWxKLEdBQUc7TUFBQSxPQUFBcEssYUFBQSxDQUFBQSxhQUFBLEtBQ0xzVCxJQUFJLFdBQUFuVCxnQkFBQSxpQkFDTmlLLEdBQUcsRUFBR0EsR0FBRyxLQUFLLE9BQU8sR0FBRzJGLEtBQUssR0FBR21ELFNBQVMsQ0FBQzlJLEdBQUcsQ0FBQyxJQUFJNEksY0FBYyxDQUFDNUksR0FBRyxDQUFDO0lBQUEsQ0FDdEUsRUFDRixDQUFDLENBQ0gsQ0FBQztFQUNILENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNtSiwwQkFBMEJBLENBQUNDLFVBQXVCLEVBQUVwSixHQUFXLEVBQU87RUFDN0UsSUFBTXhHLE1BQU0sR0FBRzRQLFVBQVUsQ0FBQzVQLE1BQXlDO0VBQ25FLElBQUlBLE1BQU0sSUFBSUEsTUFBTSxDQUFDd0csR0FBRyxDQUFDLEtBQUtqRyxTQUFTLEVBQUU7SUFDdkMsT0FBT1AsTUFBTSxDQUFDd0csR0FBRyxDQUFDO0VBQ3BCO0VBQ0EsSUFBTXFKLFFBQVEsR0FDWEQsVUFBVSxDQUE0Q25RLGNBQWMsSUFDcEVPLE1BQU0sSUFBSUEsTUFBTSxDQUFDUCxjQUFlO0VBQ25DLElBQUlvUSxRQUFRLElBQUksSUFBQUMsUUFBQSxhQUFPRCxRQUFRLE1BQUssUUFBUSxJQUFJQSxRQUFRLENBQUNySixHQUFHLENBQUMsS0FBS2pHLFNBQVMsRUFBRTtJQUMzRSxPQUFPc1AsUUFBUSxDQUFDckosR0FBRyxDQUFDO0VBQ3RCO0VBQ0EsT0FBT2pHLFNBQVM7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTd1AsMkJBQTJCQSxDQUN6QzlELE1BQTZCLEVBQzdCckssUUFBZSxFQUNmZ08sVUFBdUIsRUFFVDtFQUFBLElBRGRuQyxPQUFpQyxHQUFBcFIsU0FBQSxDQUFBdEMsTUFBQSxRQUFBc0MsU0FBQSxRQUFBa0UsU0FBQSxHQUFBbEUsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUV0Q1QsTUFBTSxDQUFDb1UsTUFBTSxDQUFDcE8sUUFBUSxDQUFDbkMsY0FBYyxDQUFDLENBQUNuRCxPQUFPLENBQUMsVUFBQTJULEtBQUEsRUFBeUI7SUFBQSxJQUF2QjlELEtBQUssR0FBQThELEtBQUEsQ0FBTDlELEtBQUs7TUFBRStELEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO01BQUUxSixHQUFHLEdBQUF5SixLQUFBLENBQUh6SixHQUFHO0lBQ2hFLElBQU0ySixVQUFVLEdBQUdSLDBCQUEwQixDQUFDQyxVQUFVLEVBQUV6RCxLQUFLLENBQUM7SUFDaEUsSUFBTWlFLFVBQVUsR0FBR1QsMEJBQTBCLENBQUNDLFVBQVUsRUFBRU0sS0FBSyxDQUFDO0lBQ2hFLElBQUlHLFVBQVU7SUFDZCxJQUFJRixVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFFbFYsSUFBSSxFQUFFO01BQ3BCb1YsVUFBVSxHQUFHcEUsTUFBTSxDQUFDeEQsSUFBSSxDQUFDLFVBQUE4RyxFQUFFO1FBQUEsT0FBSUEsRUFBRSxDQUFDdFUsSUFBSSxLQUFLa1YsVUFBVSxDQUFDbFYsSUFBSTtNQUFBLEVBQUM7SUFDN0Q7SUFFQSxJQUFNcVYsWUFBWSxHQUFBbFUsYUFBQSxDQUFBQSxhQUFBLEtBQ1ppVSxVQUFVLE9BQUE5VCxnQkFBQSxpQkFBSzRQLEtBQUssRUFBR2tFLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FDdkNELFVBQVUsT0FBQTdULGdCQUFBLGlCQUFLMlQsS0FBSyxFQUFHRSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQzVDO0lBQ0QsSUFBSXhVLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDeVUsWUFBWSxDQUFDLENBQUN2VyxNQUFNLEVBQUU7TUFDcEM2SCxRQUFRLENBQUMyTyxpQkFBaUIsQ0FBQ0QsWUFBWSxDQUFDO0lBQzFDO0lBRUExTyxRQUFRLENBQUM0TyxxQkFBcUIsQ0FBQ2hLLEdBQUcsQ0FBQztJQUNuQyxJQUFJaUgsT0FBTyxDQUFDVyxZQUFZLEVBQUU7TUFBQSxJQUFBcUMscUJBQUE7TUFDeEIsSUFBTUMsU0FBUyxHQUFHUCxVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRWxWLElBQUk7TUFDbEMsSUFBSXlWLFNBQVMsSUFBSUEsU0FBUyxPQUFBRCxxQkFBQSxHQUFLN08sUUFBUSxDQUFDNUIsTUFBTSxDQUFDbU0sS0FBSyxDQUFDLGNBQUFzRSxxQkFBQSx1QkFBdEJBLHFCQUFBLENBQXdCeFYsSUFBSSxHQUFFO1FBQzNELE1BQU0sSUFBSXdULEtBQUssNENBQUFuUSxNQUFBLENBQTRDNk4sS0FBSyxDQUFFLENBQUM7TUFDckU7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU92SyxRQUFRO0FBQ2pCO0FBT08sU0FBU0gsd0JBQXdCQSxDQUN0Q3JELFFBQWtCLEVBQ2xCc0QsWUFBc0MsRUFHdEM7RUFBQSxJQUZBdkQsTUFBdUQsR0FBQTlCLFNBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLFNBQUEsUUFBQWtFLFNBQUEsR0FBQWxFLFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFDNURvUixPQUE2QixHQUFBcFIsU0FBQSxDQUFBdEMsTUFBQSxPQUFBc0MsU0FBQSxNQUFBa0UsU0FBQTtFQUU3QixJQUFNbEQsU0FBa0IsR0FBRyxFQUFFO0VBQzdCLElBQU1DLE1BQXVELEdBQUcsRUFBRTtFQUVsRWEsTUFBTSxDQUFDN0IsT0FBTyxDQUFDLFVBQUFnSSxLQUFLLEVBQUk7SUFBQSxJQUFBcU0sYUFBQTtJQUN0QixJQUFJQyxhQUEyQixHQUFHLElBQUk7SUFFdEMsSUFBSXRNLEtBQUssYUFBTEEsS0FBSyxnQkFBQXFNLGFBQUEsR0FBTHJNLEtBQUssQ0FBRXRFLE1BQU0sY0FBQTJRLGFBQUEsZUFBYkEsYUFBQSxDQUFlM1MsTUFBTSxFQUFFO01BQ3pCLElBQUlJLFFBQVEsQ0FBQ2tHLEtBQUssQ0FBQ3RFLE1BQU0sQ0FBQ2hDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDO1FBQ0E0UyxhQUFhLEdBQUdDLHFCQUFxQixDQUNuQ3pTLFFBQVEsQ0FBQ2tHLEtBQUssQ0FBQ3RFLE1BQU0sQ0FBQ2hDLE1BQU0sQ0FBQyxFQUM3QnNHLEtBQUssRUFDTDVDLFlBQVksRUFDWitMLE9BQ0YsQ0FBQztNQUNIO0lBQ0Y7SUFFQSxJQUFJbUQsYUFBYSxFQUFFO01BQ2pCdlQsU0FBUyxDQUFDbkIsSUFBSSxDQUFDMFUsYUFBYSxDQUFDO0lBQy9CLENBQUMsTUFBTTtNQUNMO01BQ0F0VCxNQUFNLENBQUNwQixJQUFJLENBQUNvSSxLQUFLLENBQUM7SUFDcEI7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPO0lBQUNqSCxTQUFTLEVBQVRBLFNBQVM7SUFBRUMsTUFBTSxFQUFOQTtFQUFNLENBQUM7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU3dULDZCQUE2QkEsQ0FBQ2xQLFFBQVEsRUFBRTtFQUMvQztFQUNBLElBQUltUCxZQUFZLEdBQUduUCxRQUFRLENBQUNvUCxlQUFlLENBQUMsQ0FBQztFQUM3QztFQUNBLElBQU1DLGFBQWEsR0FBR3JQLFFBQVEsQ0FBQzVCLE1BQU0sQ0FBQ2tSLFVBQVUsR0FDNUMsQ0FBQ3RQLFFBQVEsQ0FBQ3VQLG9CQUFvQixJQUFJLEVBQUUsRUFBRTFJLElBQUksQ0FDeEMsVUFBQTJJLE9BQU87SUFBQSxPQUFJQSxPQUFPLENBQUM1SyxHQUFHLEtBQUs1RSxRQUFRLENBQUM1QixNQUFNLENBQUNrUixVQUFVO0VBQUEsQ0FDdkQsQ0FBQyxHQUNELElBQUk7RUFFUixJQUFJRCxhQUFhLEVBQUU7SUFDakI7SUFDQSxJQUFNSSxZQUFZLEdBQUcsQ0FBQ0osYUFBYSxDQUFDSyxZQUFZLElBQUksRUFBRSxFQUFFQyxPQUFPLENBQUMsVUFBQTNMLEtBQUs7TUFBQSxPQUFJQSxLQUFLLENBQUM4SCxPQUFPLElBQUksRUFBRTtJQUFBLEVBQUM7SUFDN0YsSUFBTThELFlBQVksR0FBRyxJQUFJMU0sR0FBRyxDQUFDbU0sYUFBYSxDQUFDNUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUNqRTBDLFlBQVksR0FBRyxHQUFBelMsTUFBQSxLQUFBQyxtQkFBQSxhQUNUMFMsYUFBYSxDQUFDNUMsZUFBZSxJQUFJLEVBQUUsT0FBQTlQLG1CQUFBLGFBQ25DMFMsYUFBYSxDQUFDUSxlQUFlLElBQUksRUFBRSxPQUFBbFQsbUJBQUEsYUFDcEM4UyxZQUFZLEdBQ2ZuSixNQUFNLENBQUMsVUFBQ3dILElBQUksRUFBRWxKLEdBQUcsRUFBSztNQUN0QixJQUFNa0wsR0FBRyxHQUFHWCxZQUFZLENBQUN2SyxHQUFHLENBQUM7TUFDN0IsSUFBSSxDQUFDa0wsR0FBRyxFQUFFO1FBQ1IsT0FBT2hDLElBQUk7TUFDYjtNQUNBO01BQ0E7TUFDQSxJQUFJOEIsWUFBWSxDQUFDeE0sR0FBRyxDQUFDd0IsR0FBRyxDQUFDLEVBQUU7UUFDekIsSUFBaUJtTCxTQUFTLEdBQW9CRCxHQUFHLENBQTFDbkQsUUFBUTtVQUFnQnFELFdBQVcsT0FBQXRTLHlCQUFBLGFBQUlvUyxHQUFHLEVBQUFyWSxVQUFBO1FBQ2pELE9BQUErQyxhQUFBLENBQUFBLGFBQUEsS0FBV3NULElBQUksV0FBQW5ULGdCQUFBLGlCQUFHaUssR0FBRyxFQUFHb0wsV0FBVztNQUNyQztNQUNBLE9BQUF4VixhQUFBLENBQUFBLGFBQUEsS0FBV3NULElBQUksV0FBQW5ULGdCQUFBLGlCQUFHaUssR0FBRyxFQUFBcEssYUFBQSxDQUFBQSxhQUFBLEtBQU9zVixHQUFHO1FBQUVuRCxRQUFRLEVBQUU7TUFBSTtJQUNqRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDUjtFQUVBLE9BQU93QyxZQUFZO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRixxQkFBcUJBLENBQ25DZ0IsT0FBb0IsRUFDcEJqQyxVQUF1QixFQUN2QmxPLFlBQXNDLEVBRXhCO0VBQUEsSUFEZCtMLE9BQTRCLEdBQUFwUixTQUFBLENBQUF0QyxNQUFBLFFBQUFzQyxTQUFBLFFBQUFrRSxTQUFBLEdBQUFsRSxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRWpDLElBQU80UCxNQUFNLEdBQWdCNEYsT0FBTyxDQUE3QjVGLE1BQU07SUFBTWpPLE1BQU0sR0FBSTZULE9BQU8sQ0FBckIzVSxFQUFFO0VBQ2pCLElBQU80VSxJQUFJLEdBQUlsQyxVQUFVLENBQWxCa0MsSUFBSTtFQUNYLElBQU8xRCxZQUFZLEdBQUlYLE9BQU8sQ0FBdkJXLFlBQVk7RUFDbkI7RUFDQSxJQUFJLENBQUMwRCxJQUFJLElBQUksQ0FBQ2xXLE1BQU0sQ0FBQ21XLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDclgsSUFBSSxDQUFDK0csWUFBWSxFQUFFb1EsSUFBSSxDQUFDLElBQUksQ0FBQ2xDLFVBQVUsQ0FBQzVQLE1BQU0sRUFBRTtJQUM1RixJQUFJb08sWUFBWSxFQUFFO01BQ2hCLE1BQU0sSUFBSUssS0FBSyw2QkFBQW5RLE1BQUEsQ0FBNEJ3VCxJQUFJLDRCQUF3QixDQUFDO0lBQzFFO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJbFEsUUFBUSxHQUFHLElBQUlGLFlBQVksQ0FBQ29RLElBQUksQ0FBQyxDQUFDO0lBQ3BDNVUsRUFBRSxFQUFFMFMsVUFBVSxDQUFDMVMsRUFBRTtJQUNqQmMsTUFBTSxFQUFOQSxNQUFNO0lBQ051TixLQUFLLEVBQUVxRSxVQUFVLENBQUM1UCxNQUFNLENBQUN1TCxLQUFLO0lBQzlCbk0sS0FBSyxFQUFFd1EsVUFBVSxDQUFDNVAsTUFBTSxDQUFDWixLQUFLO0lBQzlCZ00sU0FBUyxFQUFFd0UsVUFBVSxDQUFDNVAsTUFBTSxDQUFDb0wsU0FBUztJQUN0QzZHLE1BQU0sRUFBRXJDLFVBQVUsQ0FBQzVQLE1BQU0sQ0FBQ2lTLE1BQU07SUFDaENmLFVBQVUsRUFBRXRCLFVBQVUsQ0FBQzVQLE1BQU0sQ0FBQ2tSLFVBQVU7SUFDeENnQixjQUFjLEVBQUV0QyxVQUFVLENBQUM1UCxNQUFNLENBQUNrUztFQUNwQyxDQUFDLENBQUM7RUFFRixJQUFNbkIsWUFBWSxHQUFHRCw2QkFBNkIsQ0FBQ2xQLFFBQVEsQ0FBQztFQUU1RCxJQUFJaEcsTUFBTSxDQUFDQyxJQUFJLENBQUNrVixZQUFZLENBQUMsRUFBRTtJQUM3QixJQUFNckQsT0FBTyxHQUFHSix5QkFBeUIsQ0FDdkNyQixNQUFNLEVBQ04yRCxVQUFVLENBQUM1UCxNQUFNLENBQUMwTixPQUFPLEVBQ3pCcUQsWUFBWSxFQUNadEQsT0FDRixDQUFDO0lBQ0QsSUFBSUMsT0FBTyxFQUFFO01BQ1g5TCxRQUFRLENBQUMyTyxpQkFBaUIsQ0FBQztRQUN6QjdDLE9BQU8sRUFBQXRSLGFBQUEsQ0FBQUEsYUFBQSxLQUNGd0YsUUFBUSxDQUFDNUIsTUFBTSxDQUFDME4sT0FBTyxHQUN2QkEsT0FBTztNQUVkLENBQUMsQ0FBQztJQUNKLENBQUMsTUFBTSxJQUFJLENBQUNELE9BQU8sQ0FBQzlMLGdCQUFnQixFQUFFO01BQ3BDLE9BQU8sSUFBSTtJQUNiO0VBQ0Y7RUFFQSxJQUFNMk4sU0FBUyxHQUNiTSxVQUFVLENBQUM1UCxNQUFNLENBQUNzUCxTQUFTLElBQUkxTixRQUFRLENBQUM1QixNQUFNLENBQUNzUCxTQUFTLEdBQ3BETixzQkFBc0IsQ0FDcEIvQyxNQUFNLEVBQ05ySyxRQUFRLENBQUM1QixNQUFNLENBQUNzUCxTQUFTLEVBQ3pCTSxVQUFVLENBQUM1UCxNQUFNLENBQUNzUCxTQUFTLEVBQzNCN0IsT0FDRixDQUFDLEdBQ0Q3TCxRQUFRLENBQUM1QixNQUFNLENBQUNzUCxTQUFTOztFQUUvQjtFQUNBLElBQU02QyxlQUFlLEdBQUd2USxRQUFRLENBQUN3USxlQUFlLENBQzlDeFEsUUFBUSxDQUFDNUIsTUFBTSxDQUFDcVMsU0FBUyxFQUN6QnpDLFVBQVUsQ0FBQzVQLE1BQU0sQ0FBQ3FTLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFDakM7SUFDRUMsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLGtCQUFrQjtFQUNoRCxDQUNGLENBQUM7O0VBRUQ7RUFDQSxJQUFNRCxTQUFTLEdBQUd6USxRQUFRLENBQUMyUSxpQkFBaUIsR0FDeEMzUSxRQUFRLENBQUMyUSxpQkFBaUIsQ0FBQ1YsT0FBTyxFQUFFTSxlQUFlLENBQUMsR0FDcERBLGVBQWU7RUFFbkJ2USxRQUFRLENBQUMyTyxpQkFBaUIsQ0FBQztJQUN6QjhCLFNBQVMsRUFBVEEsU0FBUztJQUNUL0MsU0FBUyxFQUFUQTtFQUNGLENBQUMsQ0FBQzs7RUFFRjtFQUNBO0VBQ0E7RUFDQTFOLFFBQVEsR0FBR21PLDJCQUEyQixDQUFDOUQsTUFBTSxFQUFFckssUUFBUSxFQUFFZ08sVUFBVSxFQUFFbkMsT0FBTyxDQUFDO0VBRTdFLElBQUlXLFlBQVksRUFBRTtJQUNoQixJQUFJLENBQUN4TSxRQUFRLENBQUM4SSxhQUFhLENBQUMsQ0FBQyxFQUFFO01BQzdCLE1BQU0sSUFBSStELEtBQUssZ0NBQUFuUSxNQUFBLENBQWdDc0QsUUFBUSxDQUFDMUUsRUFBRSxDQUFFLENBQUM7SUFDL0Q7RUFDRjtFQUVBLE9BQU8wRSxRQUFRO0FBQ2pCO0FBRU8sU0FBUzRRLFdBQVdBLENBQXFCNVYsS0FBUSxFQUFFNlYsV0FBd0IsRUFBRTtFQUFBLElBQUFDLG9CQUFBO0VBQ2xGLElBQUksQ0FBQ0QsV0FBVyxFQUFFO0lBQ2hCLE9BQU83VixLQUFLO0VBQ2Q7RUFDQSxPQUFBUixhQUFBLENBQUFBLGFBQUEsS0FDS1EsS0FBSztJQUNSK1YsTUFBTSxFQUFBdlcsYUFBQSxDQUFBQSxhQUFBLEtBQ0RRLEtBQUssQ0FBQytWLE1BQU07TUFDZkMsUUFBUSxLQUFBdFUsTUFBQSxLQUFBQyxtQkFBQSxhQUFNM0IsS0FBSyxDQUFDK1YsTUFBTSxDQUFDQyxRQUFRLE9BQUFyVSxtQkFBQSxhQUFNa1UsV0FBVyxDQUFDRyxRQUFRLElBQUksRUFBRSxFQUFFO01BQ3JFO01BQ0FDLE9BQU8sR0FBQUgsb0JBQUEsR0FBRUQsV0FBVyxDQUFDSSxPQUFPLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUk5VixLQUFLLENBQUMrVixNQUFNLENBQUNFO0lBQU87RUFDckQ7QUFFTDtBQUVBLFNBQVNDLG9CQUFvQkEsQ0FBQ3JMLE9BQXNCLEVBQWU7RUFDakUsT0FBT0EsT0FBTyxDQUFDUyxNQUFNLENBQ25CLFVBQUNDLEdBQUcsRUFBRTRLLFVBQVUsRUFBSztJQUNuQixPQUFBM1csYUFBQSxDQUFBQSxhQUFBLEtBQ0srTCxHQUFHO01BQ055SyxRQUFRLEtBQUF0VSxNQUFBLEtBQUFDLG1CQUFBLGFBQU00SixHQUFHLENBQUN5SyxRQUFRLE9BQUFyVSxtQkFBQSxhQUFNd1UsVUFBVSxDQUFDSCxRQUFRLElBQUksRUFBRTtJQUFFO0VBRS9ELENBQUMsRUFDRDtJQUNFO0lBQ0E7SUFDQTtJQUNBQSxRQUFRLEVBQUUsRUFBRTtJQUNaQyxPQUFPLEVBQUVwTCxPQUFPLENBQUM5QyxJQUFJLENBQUMsVUFBQWtELENBQUM7TUFBQSxPQUFJQSxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRWdMLE9BQU87SUFBQTtFQUN2QyxDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLG9CQUFvQkEsQ0FBQ3BXLEtBQWUsRUFBRXFXLGNBQXdCLEVBQVk7RUFDeEYsSUFBTTFNLE1BQU0sR0FBQW5LLGFBQUEsQ0FBQUEsYUFBQSxLQUNQUSxLQUFLLENBQUN3QixRQUFRLEdBQ2Q2VSxjQUFjLENBQ2xCO0VBRUQsSUFBSXJaLEtBQUssQ0FBQ0MsT0FBTyxDQUFDK0MsS0FBSyxDQUFDc1csb0JBQW9CLENBQUMsRUFBRTtJQUM3QztJQUNBLElBQU1DLGFBQWEsR0FBR3ZYLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDMEssTUFBTSxDQUFDLENBQUN4SyxNQUFNLENBQzlDLFVBQUFtQixFQUFFO01BQUEsSUFBQWtXLHFCQUFBO01BQUEsT0FBSSxHQUFBQSxxQkFBQSxHQUFDeFcsS0FBSyxDQUFDc1csb0JBQW9CLGNBQUFFLHFCQUFBLGVBQTFCQSxxQkFBQSxDQUE0QnhVLFFBQVEsQ0FBQzFCLEVBQUUsQ0FBQztJQUFBLENBQ2pELENBQUM7SUFDRCxPQUFPLEdBQUFvQixNQUFBLEtBQUFDLG1CQUFBLGFBQUkzQixLQUFLLENBQUNzVyxvQkFBb0IsT0FBQTNVLG1CQUFBLGFBQUs0VSxhQUFhLEdBQUVqTCxNQUFNLENBQzdELFVBQUN3SCxJQUFJLEVBQUUxUixNQUFNO01BQUEsT0FBQTVCLGFBQUEsQ0FBQUEsYUFBQSxLQUNSc1QsSUFBSSxHQUNIbkosTUFBTSxDQUFDdkksTUFBTSxDQUFDLE9BQUF6QixnQkFBQSxpQkFBS3lCLE1BQU0sRUFBR3VJLE1BQU0sQ0FBQ3ZJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUFBLENBQ3BELEVBQ0YsQ0FBQyxDQUNILENBQUM7RUFDSDtFQUVBLE9BQU91SSxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMwQiw2QkFBNkJBLENBQUlvTCxHQUFRLEVBQVk7RUFBQSxJQUFBQyxNQUFBO0VBQzVELElBQU1DLE1BQU0sR0FBRyxJQUFJQyxHQUFHLENBQUMsQ0FBQztFQUN4QkgsR0FBRyxDQUFDL1csT0FBTyxDQUFDLFVBQUFqQyxLQUFLLEVBQUk7SUFDbkIsSUFBSSxJQUFBb1osK0JBQWtCLEVBQUNwWixLQUFLLENBQUMsRUFBRTtNQUM3QixJQUFJLENBQUNrWixNQUFNLENBQUN2TyxHQUFHLENBQUMzSyxLQUFLLENBQUMsRUFBRTtRQUN0QmtaLE1BQU0sQ0FBQ0csR0FBRyxDQUFDclosS0FBSyxFQUFFLENBQUMsQ0FBQztNQUN0QixDQUFDLE1BQU07UUFDTGtaLE1BQU0sQ0FBQ0csR0FBRyxDQUFDclosS0FBSyxFQUFFa1osTUFBTSxDQUFDSSxHQUFHLENBQUN0WixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDMUM7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGO0VBQ0EsSUFBSWtaLE1BQU0sQ0FBQzNLLElBQUksS0FBSyxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJO0VBQ2I7RUFDQSxRQUFBMEssTUFBQSxPQUFBL1UsbUJBQUEsYUFBV2dWLE1BQU0sQ0FBQzNKLE9BQU8sQ0FBQyxDQUFDLGVBQUEwSixNQUFBLHVCQUFwQkEsTUFBQSxDQUF1QnBMLE1BQU0sQ0FBQyxVQUFDQyxHQUFHLEVBQUV2TixJQUFJO0lBQUEsT0FBTUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHdU4sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHdk4sSUFBSSxHQUFHdU4sR0FBRztFQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtBQUVPLElBQU15TCxpQkFBdUMsR0FBQUMsT0FBQSxDQUFBRCxpQkFBQSxHQUFHLENBQ3JEO0VBQ0VFLEtBQUssRUFBRWpSLFdBQVc7RUFDbEJrUixJQUFJLEVBQUUsUUFBUTtFQUNkQyxXQUFXLEVBQUUsaUJBQWlCO0VBQzlCQyxhQUFhLEVBQUU7QUFDakIsQ0FBQyxFQUNEO0VBQ0VILEtBQUssRUFBRS9QLGVBQWU7RUFDdEJnUSxJQUFJLEVBQUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUQsS0FBSyxFQUFFblgsWUFBWTtFQUNuQm9YLElBQUksRUFBRSxTQUFTO0VBQ2ZDLFdBQVcsRUFBRSxrQkFBa0I7RUFDL0JDLGFBQWEsRUFBRSxxQkFBcUI7RUFDcENDLHVCQUF1QixFQUFFMVY7QUFDM0IsQ0FBQyxFQUNEO0VBQ0VzVixLQUFLLEVBQUUzSixZQUFZO0VBQ25CNEosSUFBSSxFQUFFO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VELEtBQUssRUFBRW5KLGdCQUFnQjtFQUN2Qm9KLElBQUksRUFBRSxhQUFhO0VBQ25CQyxXQUFXLEVBQUU7QUFDZixDQUFDLEVBQ0Q7RUFDRUYsS0FBSyxFQUFFek4saUJBQWlCO0VBQ3hCME4sSUFBSSxFQUFFLG1CQUFtQjtFQUN6QkMsV0FBVyxFQUFFLHVCQUF1QjtFQUNwQ0UsdUJBQXVCLEVBQUU3Syw0QkFBNEI7RUFDckQ4SyxZQUFZLEVBQUU1TSx3QkFBd0I7RUFDdEM2TSxjQUFjLEVBQUU1TTtBQUNsQixDQUFDLEVBQ0Q7RUFBQ3NNLEtBQUssRUFBRTFILGtCQUFrQjtFQUFFMkgsSUFBSSxFQUFFLGVBQWU7RUFBRUssY0FBYyxFQUFFN0g7QUFBMkIsQ0FBQyxFQUMvRjtFQUNFdUgsS0FBSyxFQUFFdEgsb0JBQW9CO0VBQzNCdUgsSUFBSSxFQUFFLGlCQUFpQjtFQUN2QkssY0FBYyxFQUFFekg7QUFDbEIsQ0FBQyxFQUNEO0VBQUNtSCxLQUFLLEVBQUVySyxjQUFjO0VBQUVzSyxJQUFJLEVBQUUsV0FBVztFQUFFQyxXQUFXLEVBQUU7QUFBcUIsQ0FBQyxFQUM5RTtFQUFDRixLQUFLLEVBQUVsSCxvQkFBb0I7RUFBRW1ILElBQUksRUFBRSxpQkFBaUI7RUFBRUssY0FBYyxFQUFFbkg7QUFBdUIsQ0FBQyxFQUMvRjtFQUFDNkcsS0FBSyxFQUFFdEIsV0FBVztFQUFFdUIsSUFBSSxFQUFFLFFBQVE7RUFBRUssY0FBYyxFQUFFdEI7QUFBb0IsQ0FBQyxDQUMzRSIsImlnbm9yZUxpc3QiOltdfQ==
1257
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfbGF5ZXJVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwiZmluZEJ5SWQiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJpc1BsYWluT2JqZWN0IiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiZmluZCIsIl9yZWYzIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJhZ2dyZWdhdGUiLCJBR0dSRUdBVElPTl9UWVBFUyIsIm1heGltdW0iLCJsaW1pdFNlYXJjaCIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsImxheWVyRXhpc3RzIiwiY3JlYXRlUGFuZWxzIiwic20iLCJpZHMiLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJlbnRyaWVzIiwicGFuZWwiLCJmcm9tRW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheTIiLCJfcmVmNiIsIl9yZWY3Iiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzQ29uZmlnQWN0aXZlIiwiaXNWYWxpZFRvU2F2ZSIsIm1lcmdlQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsImV4aXN0aW5nSWRzIiwidmFsaWRBbm5vdGF0aW9ucyIsImlzQW5ub3RhdGlvbktpbmQiLCJraW5kIiwiYW5jaG9yUG9pbnQiLCJldmVyeSIsImlzRmluaXRlIiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY4IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsIl9yZWY5Iiwic2F2ZWRUZXh0TGFiZWwiLCJfcmVmMCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwiYWNjdSIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZjIiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmMSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJ2aXNDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMyIsInRhbGx5cyIsIk1hcCIsIm5vdE51bGxvclVuZGVmaW5lZCIsInNldCIsImdldCIsIlZJU19TVEFURV9NRVJHRVJTIiwiZXhwb3J0cyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXBcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBsYXllckNvbmZpZylcbiAgICA6IGxheWVyQ29uZmlnO1xuXG4gIGlmICghcGFyc2VkTGF5ZXJDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIFtwYXJzZWRMYXllckNvbmZpZ10sXG4gICAge2FsbG93RW1wdHlDb2x1bW46IHRydWV9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgbGV0IG1lcmdlZFN0YXRlOiBTID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG5cbiAgLy8gQXBwbHkgcGVuZGluZyBsYXllck9yZGVyIHdpdGggZ3JvdXBzIGlmIGxheWVycyBhcmUgbm93IGF2YWlsYWJsZVxuICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQgJiYgbWVyZ2VkU3RhdGUubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzYXZlZE9yZGVyID0gbWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQ7XG4gICAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyT3JkZXIobWVyZ2VkU3RhdGUsIHNhdmVkT3JkZXIpO1xuICAgIC8vIEtlZXAgc2F2ZWRMYXllck9yZGVyIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGRlZmVycmVkIGxheWVyc1xuICAgIGlmIChtZXJnZWRTdGF0ZS5sYXllclRvQmVNZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSB7Li4ubWVyZ2VkU3RhdGUsIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZE9yZGVyfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKVxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIGNvbnN0IG5ld0ZsYXRMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICAvLyBJZiBubyBncm91cHMgZXhpc3QgaW4gY3VycmVudCBvcmRlciwganVzdCB1c2UgdGhlIG5ldyBmbGF0IG9yZGVyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IGN1cnJlbnRPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3TGF5ZXJPcmRlcjogbmV3RmxhdExheWVyT3JkZXIsXG4gICAgICBuZXdMYXllcnNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVidWlsZCBsYXllck9yZGVyIHByZXNlcnZpbmcgZ3JvdXBzIGluIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9ucy5cbiAgLy8gUmVwbGFjZSBlYWNoIHN0cmluZyBlbnRyeSB3aXRoIGl0cyB1cGRhdGVkIHBvc2l0aW9uIGZyb20gbmV3RmxhdExheWVyT3JkZXIsXG4gIC8vIGFuZCBrZWVwIGdyb3VwcyBhcy1pcy5cbiAgY29uc3QgZXhpc3RpbmdGbGF0SWRzID0gbmV3IFNldChcbiAgICBjdXJyZW50T3JkZXIuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIGFzIHN0cmluZ1tdXG4gICk7XG4gIGNvbnN0IG5ld0luc2VydGVkSWRzID0gbmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+ICFleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSk7XG5cbiAgLy8gUmVidWlsZDogd2FsayB0aHJvdWdoIGN1cnJlbnRPcmRlciwgcmVwbGFjZSBzdHJpbmcgZW50cmllcyB3aXRoIHRoZWlyXG4gIC8vIG5ldyBwb3NpdGlvbiBlcXVpdmFsZW50cyBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLCB0aGVuIGFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzXG4gIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICBjb25zdCBmbGF0UXVldWUgPSBbLi4ubmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+IGV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKV07XG4gIGxldCBmbGF0SWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1cnJlbnRPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmVzdWx0LnB1c2goZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSByZW9yZGVyZWQgZmxhdCBsaXN0XG4gICAgICBpZiAoZmxhdElkeCA8IGZsYXRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmxhdFF1ZXVlW2ZsYXRJZHhdKTtcbiAgICAgICAgZmxhdElkeCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzIGF0IHRoZSBmcm9udCAodGhleSBhcmUgbmV3KVxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXI6IFsuLi5uZXdJbnNlcnRlZElkcywgLi4ucmVzdWx0XSxcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzYXZlZCBsYXllck9yZGVyIHdpdGggY3VycmVudCBzdGF0ZSB0byByZXN0b3JlIGxheWVyIGdyb3Vwcy5cbiAqIENhbGxlZCBhZnRlciBsYXllcnMgaGF2ZSBiZWVuIG1lcmdlZC4gSWYgdGhlIHNhdmVkIGNvbmZpZyBjb250YWlucyBhIGxheWVyT3JkZXJcbiAqIHdpdGggZ3JvdXBzLCB0aGlzIHJlcGxhY2VzIHRoZSBmbGF0IGxheWVyT3JkZXIgd2l0aCB0aGUgc2F2ZWQgaGllcmFyY2hpY2FsIG9uZSxcbiAqIGZpbHRlcmluZyBvdXQgYW55IGxheWVyIElEcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllck9yZGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzYXZlZExheWVyT3JkZXI/OiBhbnlbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIXNhdmVkTGF5ZXJPcmRlciB8fCAhQXJyYXkuaXNBcnJheShzYXZlZExheWVyT3JkZXIpIHx8IHNhdmVkTGF5ZXJPcmRlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgc2F2ZWQgbGF5ZXJPcmRlciBjb250YWlucyBhbnkgZ3JvdXBzXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHNhdmVkTGF5ZXJPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICAvLyBObyBncm91cHMgLSB0aGUgbGF5ZXIgbWVyZ2VyIGFscmVhZHkgaGFuZGxlZCBvcmRlcmluZyB2aWEgcHJlc2VydmVMYXllck9yZGVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgbGF5ZXJzIGhhdmVuJ3QgYmVlbiBtZXJnZWQgeWV0LCBzdG9yZSBmb3IgbGF0ZXJcbiAgaWYgKHN0YXRlLmxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRMYXllck9yZGVyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgc2V0IG9mIHZhbGlkIGxheWVyIElEcyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgdmFsaWRMYXllcklkcyA9IG5ldyBTZXQoc3RhdGUubGF5ZXJzLm1hcChsID0+IGwuaWQpKTtcblxuICAvLyBSZWN1cnNpdmVseSBmaWx0ZXIgdGhlIHNhdmVkIGxheWVyT3JkZXIgdG8gb25seSBpbmNsdWRlIHZhbGlkIGxheWVyc1xuICBmdW5jdGlvbiBmaWx0ZXJMYXllck9yZGVyKG9yZGVyOiBhbnlbXSk6IExheWVyT3JkZXIge1xuICAgIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyKTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZ3JvdXAgZXZlbiBpZiBlbXB0eSAodXNlciBtYXkgd2FudCB0aGUgZW1wdHkgZ3JvdXApXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBmaWx0ZXJlZEdyb3VwT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiYgdmFsaWRMYXllcklkcy5oYXMoZW50cnkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkTGF5ZXJPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoc2F2ZWRMYXllck9yZGVyKTtcblxuICAvLyBGaW5kIGFueSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBhcmVuJ3QgaW4gdGhlIHJlc3RvcmVkIG9yZGVyXG4gIC8vIChjb3VsZCBoYXBwZW4gaWYgbGF5ZXJzIHdlcmUgYWRkZWQgYmV0d2VlbiBzYXZlIGFuZCBsb2FkKVxuICBjb25zdCBsYXllcklkc0luUmVzdG9yZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gY29sbGVjdElkcyhvcmRlcjogYW55W10pIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29sbGVjdElkcygoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYXllcklkc0luUmVzdG9yZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29sbGVjdElkcyhyZXN0b3JlZExheWVyT3JkZXIpO1xuXG4gIC8vIEFkZCBhbnkgbWlzc2luZyBsYXllcnMgYXQgdGhlIHRvcFxuICBjb25zdCBtaXNzaW5nTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFsYXllcklkc0luUmVzdG9yZWQuaGFzKGwuaWQpKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IFsuLi5taXNzaW5nTGF5ZXJzLCAuLi5yZXN0b3JlZExheWVyT3JkZXJdLFxuICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8IGtleSA9PT0gJ2JydXNoJyB8fCBrZXkgPT09ICdnZW9jb2RlcidcbiAgICAgICAgICA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfSA9IG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbmZpZ1NhdmVkIGFzIFNhdmVkSW50ZXJhY3Rpb25Db25maWdbJ3Rvb2x0aXAnXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG1lcmdlIG5ldyBkYXRhc2V0IHRvb2x0aXBzIHdpdGggb3JpZ2luYWwgZGF0YXNldCB0b29sdGlwc1xuICAgICAgICBjb25maWdUb01lcmdlID0ge1xuICAgICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgICAgLi4uKGN1cnJlbnRDb25maWcgYXMgVG9vbHRpcEluZm9bJ2NvbmZpZyddKS5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICAuLi5tZXJnZWRUb29sdGlwXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1bm1lcmdlZFRvb2x0aXApLmxlbmd0aCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICB1bm1lcmdlZC50b29sdGlwID0ge2ZpZWxkc1RvU2hvdzogdW5tZXJnZWRUb29sdGlwLCBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZXJnZWRba2V5XSA9IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSxcbiAgICAgICAgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKSxcbiAgICAgICAgLi4uKGN1cnJlbnRDb25maWdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZmlnOiBwaWNrKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICAuLi5jb25maWdUb01lcmdlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgLi4ubWVyZ2VkXG4gICAgfSxcbiAgICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbihzdGF0ZSwgdW5tZXJnZWQpXG4gIH07XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1tdKTogU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyB7XG4gIGNvbnN0IGNvbWJpbmVkID0gey4uLmNvbmZpZ3NbMF19O1xuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgLy8gY29tYmluZSBmaWVsZHNUb1Nob3cgYW1vbmcgYWxsIGRhdGFzZXQgaWRzXG4gICAgICBjb21iaW5lZFtrZXldLmZpZWxkc1RvU2hvdyA9IHRvQmVDb21iaW5lZFByb3BzXG4gICAgICAgIC5tYXAocCA9PiBwLmZpZWxkc1RvU2hvdylcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBuZXh0RmllbGRzVG9TaG93KSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXh0RGF0YUlkS2V5IGluIG5leHRGaWVsZHNUb1Nob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb29sdGlwRmllbGRzID0gbmV4dEZpZWxkc1RvU2hvd1tuZXh0RGF0YUlkS2V5XTtcbiAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhc2V0IGlkIGlzIG5vdCBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyB0aGVuIGFkZCBpdCB3aXRoIGl0cyB0b29sdGlwIGZpZWxkc1xuICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0gPSBuZXh0VG9vbHRpcEZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgZGF0YXNldCBpZCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHNvIG9ubHkgYWRkIHRoZSBuZXh0IHRvb2x0aXAgZmllbGRzIGZvciB0aGlzIGRhdGFzZXQncyBhcnJheSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBwcmVzZW50LFxuICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgdG9vbHRpcEZpZWxkLm5hbWUgcHJvcGVydHkgZm9yIHVuaXF1ZW5lc3NcbiAgICAgICAgICAgICAgbmV4dFRvb2x0aXBGaWVsZHMuZm9yRWFjaChuZXh0VEYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldLmZpbmQoKHtuYW1lfSkgPT4gbmV4dFRGLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0ucHVzaChuZXh0VEYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYnJ1c2gnKSB7XG4gICAgICAvLyBrZWVwIHRoZSBiaWdnZXN0IGJydXNoIHNpemVcbiAgICAgIGNvbWJpbmVkW2tleV0uc2l6ZSA9XG4gICAgICAgIGFnZ3JlZ2F0ZSh0b0JlQ29tYmluZWRQcm9wcywgQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bSwgcCA9PiBwLnNpemUpID8/IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2dlb2NvZGVyJykge1xuICAgICAgY29tYmluZWRba2V5XS5saW1pdFNlYXJjaCA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5saW1pdFNlYXJjaCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogUGFuZWxzIGFyZSBtYXRjaGVkIGJ5IGluZGV4OiBpbmRleCBpIG9mIGBzcGxpdE1hcHNgLCBgc3RhdGUuc3BsaXRNYXBzYCBhbmRcbiAqIGBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkYCBpcyB0aGUgc2FtZSBtYXAgcGFuZWwuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzLlxuICogICAgICBQYW5lbHMgYXJlIGNyZWF0ZWQgb25jZSBvbmUgb2YgdGhlbSBjYW4gYmUgbWVyZ2VkOiBpdCBoYXMgbm8gbGF5ZXJzLCBvciBvbmUgb2YgaXRzIGxheWVycyBleGlzdHNcbiAqIDMuIGxheWVycyB0aGF0IGRvbid0IGV4aXN0IHlldFxuICogICAgOiBzYXZlIHRvIHNwbGl0TWFwc1RvQmVNZXJnZWQsIGluIHRoZSBwYW5lbCBhdCB0aGUgc2FtZSBpbmRleFxuICogQSBsYXllciBsaXN0ZWQgaW4gc3BsaXRNYXBzIG9ubHkgc2hvd3MgaW4gdGhlIHBhbmVscyB0aGF0IGxpc3QgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbGF5ZXJFeGlzdHMgPSAoaWQ6IHN0cmluZykgPT4gc3RhdGUubGF5ZXJzLnNvbWUobCA9PiBsLmlkID09PSBpZCk7XG4gIGNvbnN0IGNyZWF0ZVBhbmVscyA9XG4gICAgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDAgfHxcbiAgICBzcGxpdE1hcHMuc29tZShzbSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhzbS5sYXllcnMpO1xuICAgICAgcmV0dXJuICFpZHMubGVuZ3RoIHx8IGlkcy5zb21lKGxheWVyRXhpc3RzKTtcbiAgICB9KTtcbiAgY29uc3QgY3VycmVudExheWVycyA9IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIXNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKSlcbiAgKTtcblxuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQ6IHR5cGVvZiBzcGxpdE1hcHMgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGNyZWF0ZVBhbmVscykge1xuICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXQsIGtlZXAgaWRcbiAgICAgIGNvbnN0IHBhbmVsID0gbWVyZ2VkW2ldIHx8IHsuLi5zbSwgbGF5ZXJzOiBjdXJyZW50TGF5ZXJzfTtcbiAgICAgIG1lcmdlZFtpXSA9IHtcbiAgICAgICAgLi4ucGFuZWwsXG4gICAgICAgIGxheWVyczogey4uLnBhbmVsLmxheWVycywgLi4uT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiBsYXllckV4aXN0cyhpZCkpKX1cbiAgICAgIH07XG4gICAgfVxuICAgIHVubWVyZ2VkW2ldID0gey4uLnNtLCBsYXllcnM6IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gIWxheWVyRXhpc3RzKGlkKSkpfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiB1bm1lcmdlZC5zb21lKHNtID0+IE9iamVjdC5rZXlzKHNtLmxheWVycykubGVuZ3RoKVxuICAgICAgPyBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCB1bm1lcmdlZClcbiAgICAgIDogc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGVmZmVjdHMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZWZmZWN0czogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZWZmZWN0cyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbXG4gICAgLi4uc3RhdGUuZWZmZWN0cyxcbiAgICAuLi4oZWZmZWN0cyB8fCBbXSlcbiAgICAgIC5tYXAoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Db25maWdcbiAgICAgICAgICA/IGNyZWF0ZUVmZmVjdChcbiAgICAgICAgICAgICAgZGVlcG1lcmdlLmFsbChbXG4gICAgICAgICAgICAgICAgZWZmZWN0LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFsbCBwYW5lbHMgd2hlbiBsb2FkaW5nIGVmZmVjdHNcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3QgJiYgZWZmZWN0LmlzVmFsaWRUb1NhdmUoKSk7XG4gICAgICB9KVxuICBdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXI6IG5ld0VmZmVjdHMubWFwKGVmZmVjdCA9PiBlZmZlY3QuaWQpXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYW5ub3RhdGlvbnM6IGFueVtdKTogUyB7XG4gIGlmICghYW5ub3RhdGlvbnMgfHwgIWFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoc3RhdGUuYW5ub3RhdGlvbnMubWFwKGEgPT4gYS5pZCkpO1xuICBjb25zdCB2YWxpZEFubm90YXRpb25zID0gYW5ub3RhdGlvbnNcbiAgICAuZmlsdGVyKFxuICAgICAgYSA9PlxuICAgICAgICBhICYmXG4gICAgICAgIGEuaWQgJiZcbiAgICAgICAgIWV4aXN0aW5nSWRzLmhhcyhhLmlkKSAmJlxuICAgICAgICBpc0Fubm90YXRpb25LaW5kKGEua2luZCkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShhLmFuY2hvclBvaW50KSAmJlxuICAgICAgICAoYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDIgfHwgYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDMpICYmXG4gICAgICAgIGEuYW5jaG9yUG9pbnQuZXZlcnkodmFsdWUgPT4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSlcbiAgICApXG4gICAgLm1hcChhID0+ICh7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBhdXRvU2l6ZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplWTogdHJ1ZSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGxpbmVDb2xvcjogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgICBsaW5lV2lkdGg6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgICAgdGV4dFdpZHRoOiAwLFxuICAgICAgdGV4dEhlaWdodDogMCxcbiAgICAgIC4uLmFcbiAgICB9KSk7XG4gIGlmICghdmFsaWRBbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogWy4uLnN0YXRlLmFubm90YXRpb25zLCAuLi52YWxpZEFubm90YXRpb25zXVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgbGF5ZXIgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGxheWVyIGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChvdmVybGF5QmxlbmRpbmcgJiYgT1ZFUkxBWV9CTEVORElOR1Nbb3ZlcmxheUJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgb3ZlcmxheSBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqKi9cbmZ1bmN0aW9uIGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgb3ZlcmxheSBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbmltYXRpb24gY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFuaW1hdGlvbkNvbmZpZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYW5pbWF0aW9uOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydhbmltYXRpb25Db25maWcnXVxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQW5pbWF0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEFuaW1hdGlvbkNvbmZpZ1tdKTogU2F2ZWRBbmltYXRpb25Db25maWcge1xuICAvLyBnZXQgdGhlIHNtYWxsZXN0IHZhbHVlcyBvZiBjdXJyZW50VGltZSBhbmQgc3BlZWQgYW1vbmcgYWxsIGNvbmZpZ3NcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VGltZTogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5jdXJyZW50VGltZSkgPz8gbnVsbCxcbiAgICBzcGVlZDogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5zcGVlZCkgPz8gbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBsYXllciBjb2x1bW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge1xuICAgICAgc2hhbGxvd0NvcHk6IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ11cbiAgICB9XG4gICk7XG5cbiAgLy8gY2FsbCBsYXllciBtZXRob2RzIHRvIHZhbGlkYXRlIHZpc0NvbmZpZyB3aGVuIHN3aXRjaGluZyBkYXRhc2V0XG4gIGNvbnN0IHZpc0NvbmZpZyA9IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnXG4gICAgPyBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZyhkYXRhc2V0LCBjb3BpZWRWaXNDb25maWcpXG4gICAgOiBjb3BpZWRWaXNDb25maWc7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIHZpc0NvbmZpZyxcbiAgICB0ZXh0TGFiZWxcbiAgfSk7XG5cbiAgLy8gdmlzdWFsIGNoYW5uZWwgZmllbGQgaXMgc2F2ZWQgdG8gYmUge25hbWUsIHR5cGV9XG4gIC8vIGZpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGQgYnkgbWF0Y2hpbmcgYm90aCBuYW1lIGFuZCB0eXBlXG4gIC8vIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gIG5ld0xheWVyID0gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIsIG9wdGlvbnMpO1xuXG4gIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICBpZiAoIW5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZTogJHtuZXdMYXllci5pZH1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVkaXRvcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBzYXZlZEVkaXRvcjogU2F2ZWRFZGl0b3IpIHtcbiAgaWYgKCFzYXZlZEVkaXRvcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIC4uLihzYXZlZEVkaXRvci5mZWF0dXJlcyB8fCBbXSldLFxuICAgICAgLy8gaWYgc2F2ZWRFZGl0b3IudmlzaWJsZSBpcyB1bmRlZmluZWQga2VlcCBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgICAgdmlzaWJsZTogc2F2ZWRFZGl0b3IudmlzaWJsZSA/PyBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUVkaXRvckNvbmZpZ3MoY29uZmlnczogU2F2ZWRFZGl0b3JbXSk6IFNhdmVkRWRpdG9yIHtcbiAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKFxuICAgIChhY2MsIG5leHRDb25maWcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgZmVhdHVyZXM6IFsuLi5hY2MuZmVhdHVyZXMsIC4uLihuZXh0Q29uZmlnLmZlYXR1cmVzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBzdGFydCB3aXRoOlxuICAgICAgLy8gLSBlbXB0eSBhcnJheSBmb3IgZmVhdHVyZXMgYWNjdW11bGF0aW9uXG4gICAgICAvLyAtIGFuZCBhcmUgYW55IG9mIHRoZSBjb25maWdzJyB2aXNpYmxlIHZhbHVlcyB0cnVlP1xuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgdmlzaWJsZTogY29uZmlncy5zb21lKGMgPT4gYz8udmlzaWJsZSlcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGU6IFZpc1N0YXRlLCBuZXdEYXRhRW50cmllczogRGF0YXNldHMpOiBEYXRhc2V0cyB7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAuLi5uZXdEYXRhRW50cmllc1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyKSkge1xuICAgIC8vIHByZXNlcnZlRGF0YXNldE9yZGVyICBtaWdodCBub3QgaW5jbHVkZSB0aGUgIG5ldyBkYXRhc2V0c1xuICAgIGNvbnN0IG5ld0RhdGFzZXRJZHMgPSBPYmplY3Qua2V5cyhtZXJnZWQpLmZpbHRlcihcbiAgICAgIGlkID0+ICFzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcj8uaW5jbHVkZXMoaWQpXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLnN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyLCAuLi5uZXdEYXRhc2V0SWRzXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgZGF0YUlkKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi4obWVyZ2VkW2RhdGFJZF0gPyB7W2RhdGFJZF06IG1lcmdlZFtkYXRhSWRdfSA6IHt9KVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIFNpbWxpYXIgcHVycG9zZSB0byBhZ2dyZWdhdGlvbiB1dGlscyBgZ2V0TW9kZWAgZnVuY3Rpb24sXG4gKiBidXQgcmV0dXJucyB0aGUgbW9kZSBpbiB0aGUgc2FtZSB2YWx1ZSB0eXBlIHdpdGhvdXQgY29lcmNpbmcgdG8gYSBzdHJpbmcuXG4gKiBJdCBpZ25vcmVzIGB1bmRlZmluZWRgIG9yIGBudWxsYCB2YWx1ZXMsIGJ1dCByZXR1cm5zIGBudWxsYCBpZiBubyBtb2RlIGNvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlPFQ+KGFycjogVFtdKTogVCB8IG51bGwge1xuICBjb25zdCB0YWxseXMgPSBuZXcgTWFwKCk7XG4gIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgaWYgKCF0YWxseXMuaGFzKHZhbHVlKSkge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIHRhbGx5cy5nZXQodmFsdWUpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmV0dXJuIHRoZSB2YWx1ZSB3aXRoIHRoZSBoaWdoZXN0IHRvdGFsIG9jY3VycmVuY2UgY291bnRcbiAgaWYgKHRhbGx5cy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsuLi50YWxseXMuZW50cmllcygpXT8ucmVkdWNlKChhY2MsIG5leHQpID0+IChuZXh0WzFdID4gYWNjWzFdID8gbmV4dCA6IGFjYykpWzBdO1xufVxuXG5leHBvcnQgY29uc3QgVklTX1NUQVRFX01FUkdFUlM6IFZpc1N0YXRlTWVyZ2Vyczxhbnk+ID0gW1xuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJzLFxuICAgIHByb3A6ICdsYXllcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVMYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJPcmRlcixcbiAgICBwcm9wOiAnbGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFB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