@commercetools-uikit/money-input 19.26.0 → 20.0.0

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.
@@ -14,7 +14,6 @@ var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
14
14
  var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
15
15
  var _objectWithoutProperties = require('@babel/runtime-corejs3/helpers/objectWithoutProperties');
16
16
  var _styled = require('@emotion/styled/base');
17
- var _pt = require('prop-types');
18
17
  var _lastIndexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/last-index-of');
19
18
  var _parseFloat = require('@babel/runtime-corejs3/core-js-stable/parse-float');
20
19
  var _Math$trunc = require('@babel/runtime-corejs3/core-js-stable/math/trunc');
@@ -50,7 +49,6 @@ var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_O
50
49
  var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
51
50
  var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
52
51
  var _styled__default = /*#__PURE__*/_interopDefault(_styled);
53
- var _pt__default = /*#__PURE__*/_interopDefault(_pt);
54
52
  var _lastIndexOfInstanceProperty__default = /*#__PURE__*/_interopDefault(_lastIndexOfInstanceProperty);
55
53
  var _parseFloat__default = /*#__PURE__*/_interopDefault(_parseFloat);
56
54
  var _Math$trunc__default = /*#__PURE__*/_interopDefault(_Math$trunc);
@@ -759,7 +757,7 @@ var messages = reactIntl.defineMessages({
759
757
  const _excluded = ["id"],
760
758
  _excluded2 = ["currencies", "horizontalConstraint", "menuPortalZIndex"];
761
759
  function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
762
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context11, _context12; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context11 = ownKeys(Object(t), !0)).call(_context11, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context12 = ownKeys(Object(t))).call(_context12, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
760
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context1, _context10; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context1 = ownKeys(Object(t), !0)).call(_context1, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context10 = ownKeys(Object(t))).call(_context10, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
763
761
  function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
764
762
  const TooltipWrapper = /*#__PURE__*/_styled__default["default"]("div", process.env.NODE_ENV === "production" ? {
765
763
  target: "e1u90zjc0"
@@ -771,7 +769,7 @@ const TooltipWrapper = /*#__PURE__*/_styled__default["default"]("div", process.e
771
769
  styles: "display:flex"
772
770
  } : {
773
771
  name: "zjik7",
774
- styles: "display:flex/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQ2lDIiwiZmlsZSI6Im1vbmV5LWlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgaGFzIGZyb20gJ2xvZGFzaC9oYXMnO1xuaW1wb3J0IFNlbGVjdCwge1xuICBjb21wb25lbnRzLFxuICB0eXBlIFNpbmdsZVZhbHVlUHJvcHMsXG4gIHR5cGUgUHJvcHMgYXMgUmVhY3RTZWxlY3RQcm9wcyxcbn0gZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7IGNzcywgdHlwZSBUaGVtZSB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGRlc2lnblRva2VucyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHtcbiAgd2FybmluZyxcbiAgaXNOdW1iZXJpc2gsXG4gIGZpbHRlckRhdGFBdHRyaWJ1dGVzLFxuICBjcmVhdGVTZXF1ZW50aWFsSWQsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3V0aWxzJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3Rvb2x0aXAnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd25JbmRpY2F0b3IsXG4gIGNyZWF0ZVNlbGVjdFN0eWxlcyxcbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvc2VsZWN0LXV0aWxzJztcbmltcG9ydCB7IEZyYWN0aW9uRGlnaXRzSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBDb25zdHJhaW50cyBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9jb25zdHJhaW50cyc7XG5pbXBvcnQgeyB1c2VGaWVsZElkLCB1c2VUb2dnbGVTdGF0ZSB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2hvb2tzJztcbmltcG9ydCBhbGxDdXJyZW5jaWVzIGZyb20gJy4vY3VycmVuY2llcyc7XG5pbXBvcnQge1xuICBnZXRIaWdoUHJlY2lzaW9uV3JhcHBlclN0eWxlcyxcbiAgZ2V0Q3VycmVuY3lMYWJlbFN0eWxlcyxcbiAgZ2V0QW1vdW50SW5wdXRTdHlsZXMsXG59IGZyb20gJy4vbW9uZXktaW5wdXQuc3R5bGVzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuL21lc3NhZ2VzJztcblxuY29uc3QgVG9vbHRpcFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCA9IGNyZWF0ZVNlcXVlbnRpYWxJZCgnbW9uZXktaW5wdXQtJyk7XG5cbmNvbnN0IGdldFBvcnRhbElkID0gKGlkPzogc3RyaW5nKSA9PiBgcG9ydGFsLSR7aWR9YDtcbmNvbnN0IGdldFBvcnRhbE5vZGUgPSAoaWQ/OiBzdHJpbmcpID0+XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2dldFBvcnRhbElkKGlkKX1gKTtcblxudHlwZSBUTGFiZWwgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBvcnRhbCA9IChwcm9wczogVExhYmVsKSA9PiB7XG4gIGNvbnN0IGRvbU5vZGUgPSBnZXRQb3J0YWxOb2RlKHByb3BzLmlkKTtcbiAgaWYgKGRvbU5vZGUpIHtcbiAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKHByb3BzLmNoaWxkcmVuLCBkb21Ob2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IEN1cnJlbmN5TGFiZWwgPSAocHJvcHM6IFRMYWJlbCkgPT4gKFxuICA8bGFiZWwgaHRtbEZvcj17cHJvcHMuaWR9IGNzcz17Z2V0Q3VycmVuY3lMYWJlbFN0eWxlcyhwcm9wcyl9PlxuICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgPC9sYWJlbD5cbik7XG5cbkN1cnJlbmN5TGFiZWwuZGlzcGxheU5hbWUgPSAnQ3VycmVuY3lMYWJlbCc7XG5cbnR5cGUgVFNpbmdsZVZhbHVlID0ge1xuICBpZD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG59ICYgU2luZ2xlVmFsdWVQcm9wcztcblxuY29uc3QgU2luZ2xlVmFsdWUgPSAoeyBpZCwgLi4ucHJvcHMgfTogVFNpbmdsZVZhbHVlKSA9PiAoXG4gIDxjb21wb25lbnRzLlNpbmdsZVZhbHVlIHsuLi5wcm9wc30+XG4gICAgPGxhYmVsIGh0bWxGb3I9e2lkfT57cHJvcHMuY2hpbGRyZW59PC9sYWJlbD5cbiAgPC9jb21wb25lbnRzLlNpbmdsZVZhbHVlPlxuKTtcblxuU2luZ2xlVmFsdWUuZGlzcGxheU5hbWUgPSAnU2luZ2xlVmFsdWUnO1xuXG50eXBlIFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9IChcbiAgaW5wdXQ6IFRJbnB1dFByb3BzICYge1xuICAgIGN1cnJlbmN5SGFzRm9jdXM/OiBib29sZWFuO1xuICB9XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFRJbnB1dFByb3BzID0ge1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHRoZW1lPzogVGhlbWU7XG59O1xuXG50eXBlIFRCYXNlID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xufTtcbi8vIG92ZXJ3cml0ZSBzdHlsZXMgb2YgY3JlYXRlU2VsZWN0U3R5bGVzXG5jb25zdCBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlczogVENyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzID0gKHtcbiAgaGFzV2FybmluZyxcbiAgaGFzRXJyb3IsXG4gIGlzQ29uZGVuc2VkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlYWRPbmx5LFxuICBtZW51UG9ydGFsWkluZGV4LFxuICBjdXJyZW5jeUhhc0ZvY3VzLFxufSkgPT4ge1xuICBjb25zdCBzZWxlY3RTdHlsZXMgPSBjcmVhdGVTZWxlY3RTdHlsZXMoe1xuICAgIGhhc1dhcm5pbmcsXG4gICAgaGFzRXJyb3IsXG4gICAgbWVudVBvcnRhbFpJbmRleCxcbiAgICBpc0NvbmRlbnNlZCxcbiAgICBpc1JlYWRPbmx5LFxuICAgIGlzRGlzYWJsZWQsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLnNlbGVjdFN0eWxlcyxcbiAgICBjb250cm9sOiAoYmFzZTogVEJhc2UsIHN0YXRlOiBSZWFjdFNlbGVjdFByb3BzKSA9PiAoe1xuICAgICAgLi4uc2VsZWN0U3R5bGVzLmNvbnRyb2woYmFzZSwgc3RhdGUpLFxuICAgICAgcGFkZGluZzogYDAgJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzI1fWAsXG4gICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzAnLFxuICAgICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlclJpZ2h0OiAnMCcsXG4gICAgICBtaW5XaWR0aDogJzgwcHgnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBib3JkZXJDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkRpc2FibGVkfSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlblJlYWRvbmx5fSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRXJyb3I7XG4gICAgICAgIGlmIChoYXNXYXJuaW5nKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGN1cnJlbmN5SGFzRm9jdXMpIHtcbiAgICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRm9jdXNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXQ7XG4gICAgICB9KSgpLFxuICAgICAgY3Vyc29yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuICdub3QtYWxsb3dlZCc7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gYGRlZmF1bHRgO1xuICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgfSkoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0pKCksXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0LFxuICAgICAgfSxcbiAgICAgICcmOmhvdmVyOm5vdCg6cmVhZC1vbmx5KTpub3QoOmRpc2FibGVkKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuSG92ZXJlZCxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgc2luZ2xlVmFsdWU6IChiYXNlOiBUQmFzZSkgPT4gKHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWF4V2lkdGg6ICdpbml0aWFsJyxcbiAgICAgIGNvbG9yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmZvbnRDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5XYXJuaW5nO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seTtcbiAgICAgICAgcmV0dXJuIGJhc2UuY29sb3I7XG4gICAgICB9KSgpLFxuICAgIH0pLFxuICAgIGRyb3Bkb3duSW5kaWNhdG9yOiAoKSA9PiAoe1xuICAgICAgZmlsbDogaXNSZWFkT25seVxuICAgICAgICA/IGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seVxuICAgICAgICA6IGRlc2lnblRva2Vucy5jb2xvck5ldXRyYWw0MCxcbiAgICB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFRDdXJyZW5jeUNvZGUgPSBrZXlvZiB0eXBlb2YgYWxsQ3VycmVuY2llcztcblxudHlwZSBUTW9uZXlDb25kaXRpb25hbFByb3BzID1cbiAgfCB7IHR5cGU6ICdoaWdoUHJlY2lzaW9uJzsgcHJlY2lzZUFtb3VudDogbnVtYmVyIH1cbiAgfCB7XG4gICAgICAvKipcbiAgICAgICAqIFVzdWFsbHkgZWl0aGVyIGEgYGNlbnRQcmVjaXNpb25gIG9yIGEgYGhpZ2hQcmVjaXNpb25gLlxuICAgICAgICovXG4gICAgICB0eXBlOiAnY2VudFByZWNpc2lvbic7XG4gICAgICBwcmVjaXNlQW1vdW50PzogbmV2ZXI7XG4gICAgfTtcbmV4cG9ydCB0eXBlIFRNb25leVZhbHVlID0ge1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGU7XG4gIGNlbnRBbW91bnQ6IG51bWJlcjtcbiAgZnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcbn0gJiBUTW9uZXlDb25kaXRpb25hbFByb3BzO1xuLy8gVGhlIE1vbmV5SW5wdXQgY29tcG9uZW50IGFsd2F5cyBvcGVyYXRlcyBvbiBhIHZhbHVlIGNvbnNpc3Rpbmcgb2Y6XG4vLyBgYGBcbi8vIHsgYW1vdW50OiBTdHJpbmcsIGN1cnJlbmN5Q29kZTogU3RyaW5nIH1cbi8vIGBgYFxuLy9cbi8vIFRoZSBhbW91bnQgbWF5IG9ubHkgdXNlIGEgZG90IGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbi8vIFRoZSBgY3VycmVuY3lDb2RlYCBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy9cbi8vIFRoZSBgTW9uZXlJbnB1dGAgZG9lcyBub3QgZG8gYW55IHZhbGlkYXRpb24gb24gaXRzIG93bi4gSXQgb25seSBzZXJ2ZXMgYXMgYSB3YXlcbi8vIHRvIGdldCB0aGUgYW1vdW50IGFuZCBgY3VycmVuY3lDb2RlYCBpbnB1dCBmcm9tIHRoZSB1c2VyLiBWYWxpZGF0aW9uIGlzIGFsd2F5c1xuLy8gdXAgdG8gdGhlIHBhcmVudC5cbi8vXG4vLyBUaGUgQ1RQIEFQSSBzdXBwb3J0cyB0d28gdHlwZXMgb2YgcHJpY2VzOiBgY2VudFByZWNpc2lvbmAgYW5kIGBoaWdoUHJlY2lzaW9uYC5cbi8vIFRoZSBgTW9uZXlJbnB1dGAgaXRzZWxmIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlc2UuIEhvd2V2ZXIsXG4vLyBpdCBoYXMgdHdvIHN0YXRpYyBtZXRob2RzIGRlZmluZWQgKGBjb252ZXJ0VG9Nb25leVZhbHVlYCBhbmQgYHBhcnNlTW9uZXlWYWx1ZWApLFxuLy8gd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGBNb25leUlucHV0YCB2YWx1ZSBhbmQgdGhlIGBNb25leVZhbHVlYFxuLy8gc3VwcG9ydGVkIGJ5IHRoZSBBUEkuXG4vLyBTb21lIHBsYWNlcyBpbiB0aGUgQVBJIGRvIG5vdCBzdXBwb3J0IGBoaWdoUHJlY2lzaW9uYCBwcmljZXMsIGJ1dCB0aGVcbi8vIGBjb252ZXJ0VG9Nb25leVZhbHVlIGB3aWxsIGFsd2F5cyByZXR1cm4gZWl0aGVyIGEgYGNlbnRQcmVjaXNpb24gYG9yIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQncyB1cCB0aGUgYE1vbmV5SW5wdXRgJ3MgcGFyZW50IHRvIHNob3cgYSB2YWxpZGF0aW9uXG4vLyBlcnJvciBpbiBjYXNlIGEgYGhpZ2hQcmVjaXNpb25gIHByaWNlIGlzIHVzZWQuXG4vL1xuLy8gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFzIHRvIGhhdmUgYGhpZ2hQcmVjaXNpb25gIHdoZW4gdGhlIG51bWJlciBvZiBzdXBwbGllZFxuLy8gZnJhY3Rpb24gZGlnaXRzIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0aGUgY3VycmVuY3kgdXNlcy4gRm9yXG4vLyBleGFtcGxlLCBgRVVSIDQyLjAwYCBpcyBhbHdheXMgYSBgY2VudFByZWNpc2lvbmAgcHJpY2UsIHdoaWxlIGBFVVIgNDIuMDAxYCBpcyBhbHdheXMgYVxuLy8gYGhpZ2hQcmVjaXNpb25gIHByaWNlLiBJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBgRVVSIDQyLjAwYCBhcyBhIGBoaWdoUHJlY2lzaW9uYFxuLy8gcHJpY2UuXG4vL1xuLy8gVGhlIGZpcnN0IHRpbWUgdGhlIGNvbXBvbmVudCByZW5kZXJzLCB3ZSB3YW50IHRvIHRyeSB0byBzaG93IHRoZSBgY2VudEFtb3VudGBcbi8vIGFzIGEgZm9ybWF0dGVkIG51bWJlci4gVG8gYWNoaWV2ZSB0aGlzLCB0aGUgYHBhcnNlTW9uZXlWYWx1ZWAgZnVuY3Rpb24gY2FuXG4vLyBiZSB1c2VkIHRvIHR1cm4gdGhlIEFQSSB2YWx1ZSBpbnRvIGEgdmFsdWUgdGhlIGBNb25leUlucHV0YCB1bmRlcnN0YW5kcy5cbi8vIER1cmluZyB0aGlzIHRyYW5zZm9ybWF0aW9uLCB0aGUgbW9uZXkgdmFsdWUgd2lsbCBnZXQgZm9ybWF0dGVkIGludG8gXCJhbW91bnRcIi5cbi8vXG4vLyBXaGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlLCB3ZSBkb24ndCB3YW50IHRvIGZvcm1hdCBhZ2Fpbi4gV2Ugb25seSBmb3JtYXRcbi8vIGluIGNhc2UgdGhlIHVzZXIgYmx1cnMgdGhlIGZpZWxkLiBUaGlzIGF2b2lkcyBtYW55IGVkZ2UgY2FzZXMgd2hlcmUgdGhlXG4vLyBmb3JtYXR0aW5nIHdvdWxkIG1lc3Mgd2l0aCB0aGUgdXNlcidzIGlucHV0LlxuLy9cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgY2VudFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gICBcInR5cGVcIjogXCJjZW50UHJlY2lzaW9uXCIsXG4vLyAgIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgIFwiY2VudEFtb3VudFwiOiA0MjAwLFxuLy8gICBcImZyYWN0aW9uRGlnaXRzXCI6IDJcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgNDIuMDBgLlxuLy9cbi8vIEEgZnVsbCBleGFtcGxlIG9mIGFuIGBNb25leVZhbHVlYCB3aXRoIGBoaWdoUHJlY2lzaW9uYCB3b3VsZCBiZVxuLy8gYGBgXG4vLyB7XG4vLyAgXCJ0eXBlXCI6IFwiaGlnaFByZWNpc2lvblwiLFxuLy8gIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgXCJjZW50QW1vdW50XCI6IDEsXG4vLyAgXCJwcmVjaXNlQW1vdW50XCI6IDEyMzQ1Nixcbi8vICBcImZyYWN0aW9uRGlnaXRzXCI6IDdcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgMC4wMTIzNDU2YFxuXG4vLyBQYXJzaW5nXG4vLyBTaW5jZSBtb3N0IHVzZXJzIGFyZSBub3QgY2FyZWZ1bCBhYm91dCBob3cgdGhleSBlbnRlciB2YWx1ZXMsIHdlIHdpbGwgcGFyc2Vcbi8vIGJvdGggYC5gIGFuZCBgLGAgYXMgZGVjaW1hbCBzZXBhcmF0b3JzLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLjAwMCwwMGAgd2UgcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLDAwMC4wMGAgd2UgYWxzbyBwYXJzZSBpdCBhcyBgMTAwMGAuXG4vL1xuLy8gVGhpcyBtZWFucyB0aGUgaGlnaGVzdCBhbW91bnQgYWx3YXlzIHdpbnMuIFdlIGRvIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBsYXN0XG4vLyBwb3NpdGlvbiBvZiBgLmAgYW5kIGAsYC4gV2hhdGV2ZXIgb2NjdXJzIGxhdGVyIGlzIHVzZWQgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuZXhwb3J0IGNvbnN0IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIgPSAocmF3QW1vdW50OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gIGxldCBmcmFjdGlvbnNTZXBhcmF0b3I7XG5cbiAgaWYgKGxvY2FsZSkge1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9ICgyLjUpIC8vIHdlIG5lZWQgYW55IG51bWJlciB3aXRoIGZyYWN0aW9ucywgc28gdGhhdCB3ZSBrbm93IHdoYXQgaXMgdGhlIGZyYWN0aW9uXG4gICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSAvLyBcInN5bWJvbFwiIGZvciB0aGUgcHJvdmlkZWQgbG9jYWxlXG4gICAgICAucmVwbGFjZSgvXFxkL2csICcnKTsgLy8gdGhlbiB3ZSByZW1vdmUgdGhlIG51bWJlcnMgYW5kIGtlZXAgdGhlIFwic3ltYm9sXCJcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0RG90ID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJy4nKTtcbiAgICBjb25zdCBsYXN0Q29tbWEgPSBTdHJpbmcocmF3QW1vdW50KS5sYXN0SW5kZXhPZignLCcpO1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9IGxhc3RDb21tYSA+IGxhc3REb3QgPyAnLCcgOiAnLic7XG4gIH1cbiAgZnJhY3Rpb25zU2VwYXJhdG9yID0gZnJhY3Rpb25zU2VwYXJhdG9yID09PSAnLicgPyAnXFxcXC4nIDogZnJhY3Rpb25zU2VwYXJhdG9yOyAvLyBoZXJlIHdlIGVzY2FwZSB0aGUgJy4nIHRvIHVzZSBpdCBhcyByZWdleFxuICAvLyBUaGUgcmF3IGFtb3VudCB3aXRoIG9ubHkgb25lIHNwYXJhdG9yXG4gIGNvbnN0IG5vcm1hbGl6ZWRBbW91bnQgPSBTdHJpbmcocmF3QW1vdW50KVxuICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFteLTAtOSR7ZnJhY3Rpb25zU2VwYXJhdG9yfV1gLCAnZycpLCAnJykgLy8gd2UganVzdCBrZWVwIHRoZSBudW1iZXJzIGFuZCB0aGUgZnJhY3Rpb24gc3ltYm9sXG4gICAgLnJlcGxhY2UoZnJhY3Rpb25zU2VwYXJhdG9yLCAnLicpOyAvLyB0aGVuIHdlIGNoYW5nZSB3aGF0ZXZlciBgZnJhY3Rpb25zU2VwYXJhdG9yYCB3YXMgdG8gYC5gIHNvIHdlIGNhbiBwYXJzZSBpdCBhcyBmbG9hdFxuXG4gIHJldHVybiBwYXJzZUZsb2F0KG5vcm1hbGl6ZWRBbW91bnQpO1xufTtcblxuLy8gVHVybnMgdGhlIHVzZXIgaW5wdXQgaW50byBhIHZhbHVlIHRoZSBNb25leUlucHV0IGNhbiBwYXNzIHVwIHRocm91Z2ggb25DaGFuZ2Vcbi8vIEluIGNhc2UgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgY29udGFpbmVkIGluIFwiYW1vdW50XCIgZXhjZWVkcyB0aGVcbi8vIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMsIGl0IHdpbGwgZW1pdCBhIHByaWNlIG9mXG4vLyB0eXBlIFwiaGlnaFByZWNpc2lvblwiIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgXCJjZW50UHJlY2lzaW9uXCIuXG4vLyBJdCB3aWxsIHJldHVybiBcIm51bGxcIiBpbiBjYXNlIGFuIGludmFsaWQgdmFsdWUgaXMgZW50ZXJlZC5cbi8vIFRoZSB2YWx1ZSBpcyBpbnZhbGlkIHdoZW5cbi8vICAtIG5vIGFtb3VudCB3YXMgZW50ZXJlZFxuLy8gIC0gYW4gaW52YWxpZCBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIG5vIGN1cnJlbmN5IHdhcyBzZWxlY3RlZFxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgXCJhbW91bnRcIiB0byBiZSBhIHRyaW1tZWQgdmFsdWUuXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb25leVZhbHVlID0gKFxuICByYXdBbW91bnQ6IHN0cmluZyxcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGN1cnJlbmN5Q29kZT86IFRDdXJyZW5jeUNvZGUgfCAnJ1xuKTogVE1vbmV5VmFsdWUgfCBudWxsID0+IHtcbiAgaWYgKCFjdXJyZW5jeUNvZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGN1cnJlbmN5ID0gYWxsQ3VycmVuY2llc1tjdXJyZW5jeUNvZGVdO1xuICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgLy8gVGhlIHVzZXIgbWF5IGVudGVyIGEgdmFsdWUgd2l0aCBhIGNvbW1hLCBkb3QsIG9yIGFwb3N0cm9waGUgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuICBpZiAocmF3QW1vdW50Lmxlbmd0aCA9PT0gMCB8fCAhaXNOdW1iZXJpc2gocmF3QW1vdW50KSkgcmV0dXJuIG51bGw7XG5cbiAgd2FybmluZyhcbiAgICBsb2NhbGUgfHwgY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMgIT09IDAsXG4gICAgYE1vbmV5SW5wdXQ6IEEgbG9jYWxlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBjdXJyZW5jeSBoYXMgbm8gZnJhY3Rpb24gZGlnaXRzICgke2N1cnJlbmN5Q29kZX0pYFxuICApO1xuICBjb25zdCBhbW91bnRBc051bWJlciA9IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIocmF3QW1vdW50LCBsb2NhbGUpO1xuICBpZiAoaXNOYU4oYW1vdW50QXNOdW1iZXIpKSByZXR1cm4gbnVsbDtcblxuICAvLyBUaGUgY2VudCBhbW91bnQgaXMgcm91bmRlZCB0byB0aGUgY3VycmVuY2llJ3MgZGVmYXVsdCBudW1iZXJcbiAgLy8gb2YgZnJhY3Rpb24gZGlnaXRzIGZvciBwcmljZXMgd2l0aCBoaWdoIHByZWNpc2lvbi5cbiAgLy9cbiAgLy8gQWRkaXRpb25hbGx5LCBKYXZhU2NyaXB0IGlzIHNvbWV0aW1lcyBpbmNvcnJlY3Qgd2hlbiBtdWx0aXBseWluZyBmbG9hdHMsXG4gIC8vICAgZS5nLiAyLjQ5ICogMTAwIC0+IDI0OS4wMDAwMDAwMDAwMDAwM1xuICAvLyBXaGlsZSBpbmFjY3VyYWN5IGZyb20gbXVsdGlwbHlpbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBpcyBhXG4gIC8vIGdlbmVyYWwgcHJvYmxlbSBpbiBKUywgd2UgY2FuIGF2b2lkIGl0IGJ5IGN1dHRpbmcgb2ZmIGFsbFxuICAvLyBkZWNpbWFscy4gVGhpcyBpcyBwb3NzaWJsZSBzaW5jZSBjZW50cyBpcyB0aGUgYmFzZSB1bml0LCBzbyB3ZVxuICAvLyBvcGVyYXRlIG9uIGludGVnZXJzIGFueXdheXNcbiAgLy8gQWxzbyB3ZSBzaG91bGQgdGhlIHJvdW5kIHRoZSB2YWx1ZSB0byBlbnN1cmUgdGhhdCB3ZSBjb21lIGNsb3NlXG4gIC8vIHRvIHRoZSBuZWFyZXN0IGRlY2ltYWwgdmFsdWVcbiAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vY29tbWVyY2V0b29scy9tZXJjaGFudC1jZW50ZXItZnJvbnRlbmQvcHVsbC83NzBcbiAgY29uc3QgY2VudEFtb3VudCA9IE1hdGgudHJ1bmMoXG4gICAgTWF0aC5yb3VuZChhbW91bnRBc051bWJlciAqIDEwICoqIGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKVxuICApO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPVxuICAgIC8vIFRoZSBjb252ZXJzaW9uIHRvIGEgc3RyaW5nIHdpbGwgYWx3YXlzIHVzZSBhIGRvdCBhcyB0aGUgc2VwYXJhdG9yLlxuICAgIC8vIFRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgYSBjb21tYS5cbiAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSA9PT0gLTFcbiAgICAgID8gMFxuICAgICAgOiBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmxlbmd0aCAtIFN0cmluZyhhbW91bnRBc051bWJlcikuaW5kZXhPZignLicpIC0gMTtcblxuICBpZiAoZnJhY3Rpb25EaWdpdHNPZkFtb3VudCA+IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdoaWdoUHJlY2lzaW9uJyxcbiAgICAgIGN1cnJlbmN5Q29kZSxcbiAgICAgIGNlbnRBbW91bnQsXG4gICAgICBwcmVjaXNlQW1vdW50OiBwYXJzZUludChcbiAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGNvbnZlcnQgIGEgbnVtYmVyIGxpa2UgOC4wNjY2NTIgdG8gaXRzIGNlbnRhbW91bnRcbiAgICAgICAgLy8gV2UgY291bGQgZG8gdGhhdCBieSBtdWx0aXBseWluZyBpdCB3aXRoIDEwICoqIG51bWJlci1vZi1mcmFjdGlvbi1kaWdpdHNcbiAgICAgICAgLy8gYnV0IHRoZW4gd2UnbGwgcnVuIGludG8gcHJvYmxlbXMgd2l0aCBKYXZhU2NyaXB0J3MgZmxvYXRpbmcgcG9pbnRcbiAgICAgICAgLy8gbnVtYmVyIHByZWNpc2lvbiBhbmQgZW5kIHVwIHdpdGggODA2NjY1MS45OTk5OTk5LCBhbmQgdGhlbiBwYXJzZUludFxuICAgICAgICAvLyBjdXRzIG9mZiB0aGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBTbyBpbnN0ZWFkIG9mIHVzaW5nIG1hdGhzIHRvIGNvbnZlcnQgdGhlIG51bWJlciwgd2UganVzdCByZXBsYWNlXG4gICAgICAgIC8vIHRoZSBkb3QgaW5zaWRlIHRoZSBudW1iZXIgd2hpY2ggZG9lcyB0aGUgc2FtZSB0aGluZy5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIFwiLFwiIGFzIHdlbGwsIGFzIG51bWJlcnMgYWx3YXlzIHVzIGEgZG90XG4gICAgICAgIC8vIHdoZW4gY29udmVydGVkIHVzaW5nIFN0cmluZygpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgbWF0aGVtYXRpY2FsIHdheTogYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgICAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLnJlcGxhY2UoJy4nLCAnJyksXG4gICAgICAgIDEwXG4gICAgICApLFxuICAgICAgZnJhY3Rpb25EaWdpdHM6IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICBjZW50QW1vdW50LFxuICAgIGZyYWN0aW9uRGlnaXRzOiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cyxcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVFbXB0eU1vbmV5VmFsdWUgPSAoY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlKTogVE1vbmV5VmFsdWUgPT4gKHtcbiAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICBjdXJyZW5jeUNvZGUsXG4gIGNlbnRBbW91bnQ6IE5hTixcbiAgZnJhY3Rpb25EaWdpdHM6IDIsXG59KTtcblxuY29uc3QgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZSA9IChtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSkgPT5cbiAgbW9uZXlWYWx1ZS50eXBlID09PSAnaGlnaFByZWNpc2lvbidcbiAgICA/IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCAvIDEwICoqIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHNcbiAgICA6IG1vbmV5VmFsdWUuY2VudEFtb3VudCAvXG4gICAgICAxMCAqKiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuLy8gZ2V0cyBjYWxsZWQgd2l0aCBhIHN0cmluZyBhbmQgc2hvdWxkIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmdcbmNvbnN0IGZvcm1hdEFtb3VudCA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGVcbikgPT4ge1xuICAvLyBmYWxsYmFjayBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCBlbnRlciBhbiBhbW91bnQgeWV0IChvciBpdCdzIGludmFsaWQpXG4gIGNvbnN0IG1vbmV5VmFsdWUgPVxuICAgIGNyZWF0ZU1vbmV5VmFsdWUocmF3QW1vdW50LCBsb2NhbGUsIGN1cnJlbmN5Q29kZSkgfHxcbiAgICBjcmVhdGVFbXB0eU1vbmV5VmFsdWUoY3VycmVuY3lDb2RlKTtcblxuICBjb25zdCBhbW91bnQgPSBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gbW9uZXlWYWx1ZS5wcmVjaXNlQW1vdW50XG4gICAgPyBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuICByZXR1cm4gaXNOYU4oYW1vdW50KVxuICAgID8gJydcbiAgICA6IGFtb3VudC50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0cyB9KTtcbn07XG5cbmNvbnN0IGdldEFtb3VudElucHV0TmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uYW1vdW50YCA6IHVuZGVmaW5lZDtcbmNvbnN0IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lID0gKG5hbWU/OiBzdHJpbmcpID0+XG4gIG5hbWUgPyBgJHtuYW1lfS5jdXJyZW5jeUNvZGVgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBUVmFsdWUgPSB7XG4gIGFtb3VudDogc3RyaW5nO1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGUgfCAnJztcbn07XG5cbnR5cGUgVEN1c3RvbUV2ZW50ID0ge1xuICB0YXJnZXQ6IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICB9O1xuICBwZXJzaXN0PzogKCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgVE1vbmV5SW5wdXRQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFVzZWQgYXMgSFRNTCBpZCBwcm9wZXJ0eS4gQW4gaWQgaXMgYXV0by1nZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgYGF1dG9jb21wbGV0ZWAgcHJvcGVydHlcbiAgICovXG4gIGF1dG9Db21wbGV0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlIGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICAgKi9cbiAgJ2FyaWEtaW52YWxpZCc/OiBib29sZWFuO1xuICAvKipcbiAgICogSFRNTCBJRCBvZiBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYW4gZXJyb3IgbWVzc2FnZSByZWxhdGVkIHRvIHRoZSBpbnB1dC5cbiAgICovXG4gICdhcmlhLWVycm9ybWVzc2FnZSc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHVzZWQgdG8gY3JlYXRlIGEgSFRNTCBgbmFtZWAgcHJvcGVydHkgZm9yIHRoZSBhbW91bnQgaW5wdXQgZmllbGQgKGAke25hbWV9LmFtb3VudGApIGFuZCB0aGUgY3VycmVuY3kgZHJvcGRvd24gKGAke25hbWV9LmN1cnJlbmN5Q29kZWApLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBpbnB1dC4gQ29uc2lzdHMgb2YgdGhlIGN1cnJlbmN5IGNvZGUgYW5kIGFuIGFtb3VudC4gYGFtb3VudGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhbW91bnQuIEEgZG90IGhhcyB0byBiZSB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgICovXG4gIHZhbHVlOiBUVmFsdWU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvc3NpYmxlIGN1cnJlbmNpZXMuIFdoZW4gbm90IHByb3ZpZGVkIG9yIGVtcHR5LCB0aGUgY29tcG9uZW50IHJlbmRlcnMgYSBsYWJlbCB3aXRoIHRoZSB2YWx1ZSdzIGN1cnJlbmN5IGluc3RlYWQgb2YgYSBkcm9wZG93bi5cbiAgICovXG4gIGN1cnJlbmNpZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBibHVycmVkXG4gICAqL1xuICBvbkJsdXI/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGlucHV0IGlzIGZvY3VzZWRcbiAgICovXG4gIG9uRm9jdXM/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlZHVjZSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNvbXBvbmVudCBmb3IgYSB1aSBjb21wYWN0IHZhcmlhbnRcbiAgICovXG4gIGlzQ29uZGVuc2VkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBjYW5ub3QgYmUgbW9kaWZpZWQgKGUuZyBub3QgYXV0aG9yaXplZCwgb3IgY2hhbmdlcyBjdXJyZW50bHkgc2F2aW5nKS5cbiAgICovXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkIGlzIGRpc3BsYXlpbmcgcmVhZC1vbmx5IGNvbnRlbnRcbiAgICovXG4gIGlzUmVhZE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogRm9jdXMgdGhlIGlucHV0IG9uIGluaXRpYWwgcmVuZGVyXG4gICAqL1xuICBpc0F1dG9mb2N1c3NlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgZXZlbnQgb2YgdGhlIGlucHV0IG9yIGRyb3Bkb3duIHdoZW4gZWl0aGVyIHRoZSBjdXJyZW5jeSBvciB0aGUgYW1vdW50IGhhdmUgY2hhbmdlZC5cbiAgICovXG4gIG9uQ2hhbmdlPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBEb20gZWxlbWVudCB0byBwb3J0YWwgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHRvXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51UG9ydGFsVGFyZ2V0PzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVBvcnRhbFRhcmdldCddO1xuICAvKipcbiAgICogei1pbmRleCB2YWx1ZSBmb3IgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHBvcnRhbFxuICAgKiA8YnI+XG4gICAqIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBtZW51UG9ydGFsVGFyZ2V0YFxuICAgKi9cbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhlIG1lbnUgc2hvdWxkIGJsb2NrIHNjcm9sbCB3aGlsZSBvcGVuXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51U2hvdWxkQmxvY2tTY3JvbGw/OiBSZWFjdFNlbGVjdFByb3BzWydtZW51U2hvdWxkQmxvY2tTY3JvbGwnXTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IGlucHV0IGhhcyBlcnJvcnNcbiAgICovXG4gIGhhc0Vycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2wgdG8gaW5kaWNhdGUgb24gdGhlIGlucHV0IGlmIHRoZXJlIGFyZSBzZWxlY3RlZCB2YWx1ZXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgaW52YWxpZFxuICAgKi9cbiAgaGFzV2FybmluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93cyBoaWdoIHByZWNpc2lvbiBiYWRnZSBpbiBjYXNlIGN1cnJlbnQgdmFsdWUgdXNlcyBoaWdoIHByZWNpc2lvbi5cbiAgICovXG4gIGhhc0hpZ2hQcmVjaXNpb25CYWRnZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHNpemUgbGltaXQgb2YgdGhlIGlucHV0IGZpZWxkcy5cbiAgICovXG4gIGhvcml6b250YWxDb25zdHJhaW50PzpcbiAgICB8IDNcbiAgICB8IDRcbiAgICB8IDVcbiAgICB8IDZcbiAgICB8IDdcbiAgICB8IDhcbiAgICB8IDlcbiAgICB8IDEwXG4gICAgfCAxMVxuICAgIHwgMTJcbiAgICB8IDEzXG4gICAgfCAxNFxuICAgIHwgMTVcbiAgICB8IDE2XG4gICAgfCAnc2NhbGUnXG4gICAgfCAnYXV0byc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVuY3kgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgTW9uZXlJbnB1dCA9ICh7XG4gIGN1cnJlbmNpZXMgPSBbXSxcbiAgaG9yaXpvbnRhbENvbnN0cmFpbnQgPSAnc2NhbGUnLFxuICBtZW51UG9ydGFsWkluZGV4ID0gMSxcbiAgLi4ucHJvcHNcbn06IFRNb25leUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW2N1cnJlbmN5SGFzRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdID0gdXNlVG9nZ2xlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYW1vdW50SGFzRm9jdXMsIHRvZ2dsZUFtb3VudEhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBhbW91bnRJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBtb25leUlucHV0SWQgPSB1c2VGaWVsZElkKHByb3BzLmlkLCBtb25leUlucHV0U2VxdWVudGlhbElkKTtcblxuICBpZiAoIXByb3BzLmlzUmVhZE9ubHkpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ01vbmV5SW5wdXQ6IFwib25DaGFuZ2VcIiBpcyByZXF1aXJlZCB3aGVuIGlzIG5vdCByZWFkIG9ubHkuJ1xuICAgICk7XG4gIH1cblxuICB3YXJuSWZNZW51UG9ydGFsUHJvcHNBcmVNaXNzaW5nKHtcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIG1lbnVQb3J0YWxUYXJnZXQ6IHByb3BzLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgY29tcG9uZW50TmFtZTogJ01vbmV5SW5wdXQnLFxuICB9KTtcblxuICBjb25zdCB7IG9uRm9jdXMgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFt0b2dnbGVBbW91bnRIYXNGb2N1cywgb25Gb2N1cywgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXSk7XG5cbiAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUFtb3VudEJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgYW1vdW50ID0gcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKTtcbiAgICB0b2dnbGVBbW91bnRIYXNGb2N1cyhmYWxzZSk7XG4gICAgLy8gU2tpcCBmb3JtYXR0aW5nIGZvciBlbXB0eSB2YWx1ZSBvciB3aGVuIHRoZSBpbnB1dCBpcyB1c2VkIHdpdGggYW5cbiAgICAvLyB1bmtub3duIGN1cnJlbmN5LlxuICAgIGlmIChcbiAgICAgIGFtb3VudC5sZW5ndGggPiAwICYmXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUgJiZcbiAgICAgIGFsbEN1cnJlbmNpZXNbcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXVxuICAgICkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkQW1vdW50ID0gZm9ybWF0QW1vdW50KFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGVcbiAgICAgICk7XG5cbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgZW50ZXJlZCBhIHZhbHVlIHdpdGggY2VudFByZWNpc2lvbiwgd2UgY2FuIGZvcm1hdFxuICAgICAgLy8gdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0aGF0IGN1cnJlbmN5LCBlLmcuIDIwLjEgdG8gMjAuMTBcbiAgICAgIGlmIChTdHJpbmcoZm9ybWF0dGVkQW1vdW50KSAhPT0gYW1vdW50KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBhbiBldmVudCB3aXRoIHRoZSBub3cgZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGZha2VFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBmb3JtYXR0ZWRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGludGwubG9jYWxlLFxuICAgIG9uQ2hhbmdlLFxuICAgIG1vbmV5SW5wdXRJZCxcbiAgICBwcm9wcy5uYW1lLFxuICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMsXG4gIF0pO1xuXG4gIGNvbnN0IGhhbmRsZUFtb3VudENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyaXNoKGV2ZW50LnRhcmdldC52YWx1ZSkpIHtcbiAgICAgICAgb25DaGFuZ2U/Lih7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb24udmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICE9PSBjdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIGZyb20gYSBjdXJyZW5jeSB3aXRoIDMgZnJhY3Rpb24gZGlnaXRzIHRvXG4gICAgICAgIC8vIGEgY3VycmVuY3kgd2l0aCAyIGZyYWN0aW9uIGRpZ2l0cywgYW5kIHdoZW4gdGhlIGlucHV0IHZhbHVlIHdhc1xuICAgICAgICAvLyBcIjkuMDAwXCIgKDkpLCB0aGVuIGl0IHNob3VsZCBjaGFuZ2UgdG8gXCI5LjAwXCIgdG8gcmVmbGVjdCB0aGUgbmV3XG4gICAgICAgIC8vIGN1cnJlbmN5J3MgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVuY3kgd2FzIGEgaGlnaC1wcmVjaXNpb24gcHJpY2UsIHRoZW4gbm8gZGlnaXRzIHNob3VsZFxuICAgICAgICAvLyBiZSBsb3N0XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgICBwcm9wcy52YWx1ZS5hbW91bnQudHJpbSgpLFxuICAgICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgdXNlciBjb3VsZCBiZSBjaGFuZ2luZyB0aGUgY3VycmVuY3kgYmVmb3JlIGVudGVyaW5nIGFueSBhbW91bnQsXG4gICAgICAgIC8vIG9yIHdoaWxlIHRoZSBhbW91bnQgaXMgaW52YWxpZC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRvbid0IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBhbW91bnQuXG4gICAgICAgIGNvbnN0IG5leHRBbW91bnQgPSBpc05hTihOdW1iZXIoZm9ybWF0dGVkQW1vdW50KSlcbiAgICAgICAgICA/IHByb3BzLnZhbHVlLmFtb3VudFxuICAgICAgICAgIDogZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICAgIC8vIGNoYW5nZSBjdXJyZW5jeSBjb2RlXG4gICAgICAgIGNvbnN0IGZha2VDdXJyZW5jeUV2ZW50ID0ge1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlQ3VycmVuY3lFdmVudCk7XG5cbiAgICAgICAgLy8gY2hhbmdlIGFtb3VudCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKHByb3BzLnZhbHVlLmFtb3VudCAhPT0gbmV4dEFtb3VudCkge1xuICAgICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0QW1vdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFtb3VudElucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBpbnRsLmxvY2FsZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbW9uZXlJbnB1dElkLFxuICAgICAgcHJvcHMubmFtZSxcbiAgICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICAgIHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyh0cnVlKTtcbiAgfSwgW29uRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMsIHByb3BzLm5hbWUsIG1vbmV5SW5wdXRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Qmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKGZhbHNlKTtcbiAgfSwgW3RvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdKTtcblxuICBjb25zdCBoYXNOb0N1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgaGFzRm9jdXMgPSBjdXJyZW5jeUhhc0ZvY3VzIHx8IGFtb3VudEhhc0ZvY3VzO1xuICBjb25zdCBjdXJyZW5jeVNlbGVjdFN0eWxlcyA9IGNyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nOiBwcm9wcy5oYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yOiBwcm9wcy5oYXNFcnJvcixcbiAgICBpc0NvbmRlbnNlZDogcHJvcHMuaXNDb25kZW5zZWQsXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1JlYWRPbmx5OiBwcm9wcy5pc1JlYWRPbmx5LFxuICAgIG1lbnVQb3J0YWxaSW5kZXg6IG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgY3VycmVuY3lIYXNGb2N1cyxcbiAgfSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGxhYmVsOiBjdXJyZW5jeUNvZGUsXG4gICAgdmFsdWU6IGN1cnJlbmN5Q29kZSxcbiAgfSkpO1xuXG4gIGNvbnN0IG9wdGlvbiA9ICgoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb25DYW5kaWRhdGUpID0+IG9wdGlvbkNhbmRpZGF0ZS52YWx1ZSA9PT0gcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgLy8gZW5zdXJlIGFuIG9wdGlvbiBpcyBmb3VuZCwgZXZlbiB3aGVuIHRoZSBjdXJyZW5jaWVzIGRvbid0IGluY2x1ZGVcbiAgICAvLyB0aGUgbW9uZXkgdmFsdWUncyBjdXJyZW5jeUNvZGVcbiAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSkoKTtcblxuICBjb25zdCBpc0hpZ2hQcmVjaXNpb24gPVxuICAgICFNb25leUlucHV0LmlzRW1wdHkocHJvcHMudmFsdWUpICYmXG4gICAgTW9uZXlJbnB1dC5pc0hpZ2hQcmVjaXNpb24ocHJvcHMudmFsdWUsIGludGwubG9jYWxlKTtcblxuICBjb25zdCB7IG9uQmx1ciB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckJsdXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhhdCBib3RoIGZpZWxkcyBhcmUgbWFya2VkIGFzIHRvdWNoZWQgd2hlbiBvbmUgb2YgdGhlbVxuICAgICAgLy8gaXMgYmx1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFjb250YWluZXJSZWYuY3VycmVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldClcbiAgICAgICkge1xuICAgICAgICBvbkJsdXIoe1xuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkJsdXIsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV1cbiAgKTtcblxuICBjb25zdCBUb29sdGlwUG9ydGFsID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlbWFpbmluZ1Byb3BzKSA9PiA8UG9ydGFsIHsuLi5yZW1haW5pbmdQcm9wc30gaWQ9e3Byb3BzLmlkfSAvPixcbiAgICBbcHJvcHMuaWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29uc3RyYWludHMuSG9yaXpvbnRhbCBtYXg9e2hvcml6b250YWxDb25zdHJhaW50fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBgfVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbmV5LWlucHV0LWNvbnRhaW5lclwiXG4gICAgICAgIG9uQmx1cj17aGFuZGxlQ29udGFpbmVyQmx1cn1cbiAgICAgID5cbiAgICAgICAge2hhc05vQ3VycmVuY2llcyA/IChcbiAgICAgICAgICA8Q3VycmVuY3lMYWJlbFxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlzQ29uZGVuc2VkPXtwcm9wcy5pc0NvbmRlbnNlZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1JlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb24gJiYgb3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvQ3VycmVuY3lMYWJlbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpbnB1dElkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgbmFtZT17Z2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17b3B0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQgfHwgcHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBjb21wb25lbnRzPXtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlOiAoaW5uZXJQcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNpbmdsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgICAgICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBJbnB1dDogKG93blByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5JbnB1dCB7Li4ub3duUHJvcHN9IHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRHJvcGRvd25JbmRpY2F0b3I6IHByb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3RTZWxlY3RQcm9wc1snY29tcG9uZW50cyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgbWVudUlzT3Blbj17cHJvcHMuaXNSZWFkT25seSA/IGZhbHNlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgc3R5bGVzPXtjdXJyZW5jeVNlbGVjdFN0eWxlcyBhcyBSZWFjdFNlbGVjdFByb3BzWydzdHlsZXMnXX1cbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUN1cnJlbmN5Rm9jdXN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtwcm9wcy5tZW51UG9ydGFsVGFyZ2V0fVxuICAgICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPXtwcm9wcy5tZW51U2hvdWxkQmxvY2tTY3JvbGx9XG4gICAgICAgICAgICBtZW51UGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUN1cnJlbmN5Qmx1cn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDdXJyZW5jeUNoYW5nZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY3VycmVuY3ktZHJvcGRvd25cIlxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17YW1vdW50SW5wdXRSZWZ9XG4gICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9e3Byb3BzLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgICAgIG5hbWU9e2dldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUFtb3VudEZvY3VzfVxuICAgICAgICAgICAgdmFsdWU9e3Byb3BzLnZhbHVlLmFtb3VudH1cbiAgICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgICBnZXRBbW91bnRJbnB1dFN0eWxlcyh7IC4uLnByb3BzLCBoYXNGb2N1cyB9KSxcbiAgICAgICAgICAgICAgLy8gYWNjb3VudHMgZm9yIHNpemUgb2YgaWNvblxuICAgICAgICAgICAgICBwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiZcbiAgICAgICAgICAgICAgICBpc0hpZ2hQcmVjaXNpb24gJiZcbiAgICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAke2Rlc2lnblRva2Vucy5zcGFjaW5nNDB9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgIGN1cnJlbmN5SGFzRm9jdXMgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNEaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICFwcm9wcy5pc1JlYWRPbmx5ICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRm9jdXNlZH07XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQW1vdW50Q2hhbmdlfVxuICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVBbW91bnRCbHVyfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICByZWFkT25seT17cHJvcHMuaXNSZWFkT25seX1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuaXNBdXRvZm9jdXNzZWR9XG4gICAgICAgICAgICB7Li4uZmlsdGVyRGF0YUF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICBob3Jpem9udGFsQ29uc3RyYWludCxcbiAgICAgICAgICAgICAgbWVudVBvcnRhbFpJbmRleCxcbiAgICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8qIEFSSUEgKi9cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17cHJvcHNbJ2FyaWEtaW52YWxpZCddfVxuICAgICAgICAgICAgYXJpYS1lcnJvcm1lc3NhZ2U9e3Byb3BzWydhcmlhLWVycm9ybWVzc2FnZSddfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3Byb3BzLmhhc0hpZ2hQcmVjaXNpb25CYWRnZSAmJiBpc0hpZ2hQcmVjaXNpb24gJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgeyFwcm9wcy5pc0Rpc2FibGVkICYmIDxkaXYgaWQ9e2dldFBvcnRhbElkKHByb3BzLmlkKX0gLz59XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9eygpID0+XG4gICAgICAgICAgICAgICAgICBnZXRIaWdoUHJlY2lzaW9uV3JhcHBlclN0eWxlcyh7XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICBvZmY9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3AtZW5kXCJcbiAgICAgICAgICAgICAgICAgIC8vIHdlIHVzZSBuZWdhdGl2ZSBtYXJnaW4gdG8gbWFrZSB1cCBmb3IgdGhlIHBhZGRpbmcgaW4gdGhlIFRvb2x0aXAgV3JhcHBlclxuICAgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgdG9vbHRpcCBpcyBmbHVzaCB3aXRoIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIHN0eWxlcz17e1xuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBgJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAtJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzEwfSAke2Rlc2lnblRva2Vucy5zcGFjaW5nMjB9IDBgLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaGlnaFByZWNpc2lvbil9XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgICAgICAgICAgICAgIFRvb2x0aXBXcmFwcGVyQ29tcG9uZW50OiBUb29sdGlwUG9ydGFsLFxuICAgICAgICAgICAgICAgICAgICBXcmFwcGVyQ29tcG9uZW50OiBUb29sdGlwV3JhcHBlcixcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEZyYWN0aW9uRGlnaXRzSWNvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuaXNEaXNhYmxlZCA/ICduZXV0cmFsNjAnIDogJ2luZm8nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnN0cmFpbnRzLkhvcml6b250YWw+XG4gICk7XG59O1xuXG5Nb25leUlucHV0LmRpc3BsYXlOYW1lID0gJ01vbmV5SW5wdXQnO1xuXG5Nb25leUlucHV0LmdldEFtb3VudElucHV0SWQgPSBnZXRBbW91bnRJbnB1dE5hbWU7XG5cbk1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkID0gZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWU7XG5cbk1vbmV5SW5wdXQuY29udmVydFRvTW9uZXlWYWx1ZSA9ICh2YWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZykgPT5cbiAgY3JlYXRlTW9uZXlWYWx1ZShcbiAgICB0eXBlb2YgdmFsdWUuYW1vdW50ID09PSAnc3RyaW5nJyA/IHZhbHVlLmFtb3VudC50cmltKCkgOiAnJyxcbiAgICBsb2NhbGUsXG4gICAgdmFsdWUuY3VycmVuY3lDb2RlXG4gICk7XG5cbk1vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlID0gKFxuICBtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSxcbiAgbG9jYWxlOiBzdHJpbmdcbik6IFRWYWx1ZSA9PiB7XG4gIGlmICghbW9uZXlWYWx1ZSkgcmV0dXJuIHsgY3VycmVuY3lDb2RlOiAnJywgYW1vdW50OiAnJyB9O1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBBIGxvY2FsZSBtdXN0IGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50J1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIG1vbmV5VmFsdWUgPT09ICdvYmplY3QnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBiZSBwYXNzZWQgYXMgYW4gb2JqZWN0IG9yIGJlIHVuZGVmaW5lZCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJjdXJyZW5jeUNvZGVcIidcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIGhhcyhhbGxDdXJyZW5jaWVzLCBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IHVzZSBrbm93biBjdXJyZW5jeSBjb2RlJ1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgLy8gaGlnaFByZWNpc2lvbiBvciBjZW50UHJlY2lzaW9uIHZhbHVlcyBtdXN0IGJlIHNldFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmNlbnRBbW91bnQgPT09ICdudW1iZXInIHx8XG4gICAgICAodHlwZW9mIG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHMgPT09ICdudW1iZXInKSxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgY29udGFpbiBcImFtb3VudFwiJ1xuICApO1xuXG4gIGNvbnN0IGFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzLFxuICAgIH0pLFxuICAgIGxvY2FsZSxcbiAgICBtb25leVZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG4gIHJldHVybiB7IGFtb3VudCwgY3VycmVuY3lDb2RlOiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSB9O1xufTtcblxuTW9uZXlJbnB1dC5pc0VtcHR5ID0gKGZvcm1WYWx1ZTogVFZhbHVlKSA9PlxuICAhZm9ybVZhbHVlIHx8XG4gIGZvcm1WYWx1ZS5hbW91bnQudHJpbSgpID09PSAnJyB8fFxuICBmb3JtVmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSA9PT0gJyc7XG5cbk1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uID0gKGZvcm1WYWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB3YXJuaW5nKFxuICAgICFNb25leUlucHV0LmlzRW1wdHkoZm9ybVZhbHVlKSxcbiAgICAnTW9uZXlWYWx1ZS5pc0hpZ2hQcmVjaXNpb24gbWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBtb25leSB2YWx1ZS4nXG4gICk7XG4gIGNvbnN0IG1vbmV5VmFsdWUgPSBNb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUoZm9ybVZhbHVlLCBsb2NhbGUpO1xuICByZXR1cm4gbW9uZXlWYWx1ZT8udHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nO1xufTtcblxudHlwZSBUVG91Y2hlZCA9IHtcbiAgYW1vdW50PzogYm9vbGVhbjtcbiAgY3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbn07XG5cbk1vbmV5SW5wdXQuaXNUb3VjaGVkID0gKHRvdWNoZWQ/OiBUVG91Y2hlZCkgPT5cbiAgQm9vbGVhbih0b3VjaGVkICYmIHRvdWNoZWQuY3VycmVuY3lDb2RlICYmIHRvdWNoZWQuYW1vdW50KTtcblxuZXhwb3J0IGRlZmF1bHQgTW9uZXlJbnB1dDtcbiJdfQ== */",
772
+ styles: "display:flex/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQ2lDIiwiZmlsZSI6Im1vbmV5LWlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG4gIHR5cGUgUmVhY3ROb2RlLFxuICB0eXBlIENvbXBvbmVudFR5cGUsXG4gIHR5cGUgQ2hhbmdlRXZlbnQsXG4gIHR5cGUgRm9jdXNFdmVudCxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgaGFzIGZyb20gJ2xvZGFzaC9oYXMnO1xuaW1wb3J0IFNlbGVjdCwge1xuICBjb21wb25lbnRzLFxuICB0eXBlIFNpbmdsZVZhbHVlUHJvcHMsXG4gIHR5cGUgUHJvcHMgYXMgUmVhY3RTZWxlY3RQcm9wcyxcbn0gZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7IGNzcywgdHlwZSBUaGVtZSB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGRlc2lnblRva2VucyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHtcbiAgd2FybmluZyxcbiAgaXNOdW1iZXJpc2gsXG4gIGZpbHRlckRhdGFBdHRyaWJ1dGVzLFxuICBjcmVhdGVTZXF1ZW50aWFsSWQsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3V0aWxzJztcbmltcG9ydCBUb29sdGlwLCB7IHR5cGUgVFRvb2x0aXBQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3Rvb2x0aXAnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd25JbmRpY2F0b3IsXG4gIGNyZWF0ZVNlbGVjdFN0eWxlcyxcbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvc2VsZWN0LXV0aWxzJztcbmltcG9ydCB7IEZyYWN0aW9uRGlnaXRzSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBDb25zdHJhaW50cyBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9jb25zdHJhaW50cyc7XG5pbXBvcnQgeyB1c2VGaWVsZElkLCB1c2VUb2dnbGVTdGF0ZSB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2hvb2tzJztcbmltcG9ydCBhbGxDdXJyZW5jaWVzIGZyb20gJy4vY3VycmVuY2llcyc7XG5pbXBvcnQge1xuICBnZXRIaWdoUHJlY2lzaW9uV3JhcHBlclN0eWxlcyxcbiAgZ2V0Q3VycmVuY3lMYWJlbFN0eWxlcyxcbiAgZ2V0QW1vdW50SW5wdXRTdHlsZXMsXG59IGZyb20gJy4vbW9uZXktaW5wdXQuc3R5bGVzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuL21lc3NhZ2VzJztcblxuY29uc3QgVG9vbHRpcFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCA9IGNyZWF0ZVNlcXVlbnRpYWxJZCgnbW9uZXktaW5wdXQtJyk7XG5cbmNvbnN0IGdldFBvcnRhbElkID0gKGlkPzogc3RyaW5nKSA9PiBgcG9ydGFsLSR7aWR9YDtcbmNvbnN0IGdldFBvcnRhbE5vZGUgPSAoaWQ/OiBzdHJpbmcpID0+XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2dldFBvcnRhbElkKGlkKX1gKTtcblxudHlwZSBUTGFiZWwgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBvcnRhbCA9IChwcm9wczogVExhYmVsKSA9PiB7XG4gIGNvbnN0IGRvbU5vZGUgPSBnZXRQb3J0YWxOb2RlKHByb3BzLmlkKTtcbiAgaWYgKGRvbU5vZGUpIHtcbiAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKHByb3BzLmNoaWxkcmVuLCBkb21Ob2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IEN1cnJlbmN5TGFiZWwgPSAocHJvcHM6IFRMYWJlbCkgPT4gKFxuICA8bGFiZWwgaHRtbEZvcj17cHJvcHMuaWR9IGNzcz17Z2V0Q3VycmVuY3lMYWJlbFN0eWxlcyhwcm9wcyl9PlxuICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgPC9sYWJlbD5cbik7XG5cbkN1cnJlbmN5TGFiZWwuZGlzcGxheU5hbWUgPSAnQ3VycmVuY3lMYWJlbCc7XG5cbnR5cGUgVFNpbmdsZVZhbHVlID0ge1xuICBpZD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG59ICYgU2luZ2xlVmFsdWVQcm9wcztcblxuY29uc3QgU2luZ2xlVmFsdWUgPSAoeyBpZCwgLi4ucHJvcHMgfTogVFNpbmdsZVZhbHVlKSA9PiAoXG4gIDxjb21wb25lbnRzLlNpbmdsZVZhbHVlIHsuLi5wcm9wc30+XG4gICAgPGxhYmVsIGh0bWxGb3I9e2lkfT57cHJvcHMuY2hpbGRyZW59PC9sYWJlbD5cbiAgPC9jb21wb25lbnRzLlNpbmdsZVZhbHVlPlxuKTtcblxuU2luZ2xlVmFsdWUuZGlzcGxheU5hbWUgPSAnU2luZ2xlVmFsdWUnO1xuXG50eXBlIFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9IChcbiAgaW5wdXQ6IFRJbnB1dFByb3BzICYge1xuICAgIGN1cnJlbmN5SGFzRm9jdXM/OiBib29sZWFuO1xuICB9XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFRJbnB1dFByb3BzID0ge1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHRoZW1lPzogVGhlbWU7XG59O1xuXG50eXBlIFRCYXNlID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xufTtcbi8vIG92ZXJ3cml0ZSBzdHlsZXMgb2YgY3JlYXRlU2VsZWN0U3R5bGVzXG5jb25zdCBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlczogVENyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzID0gKHtcbiAgaGFzV2FybmluZyxcbiAgaGFzRXJyb3IsXG4gIGlzQ29uZGVuc2VkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlYWRPbmx5LFxuICBtZW51UG9ydGFsWkluZGV4LFxuICBjdXJyZW5jeUhhc0ZvY3VzLFxufSkgPT4ge1xuICBjb25zdCBzZWxlY3RTdHlsZXMgPSBjcmVhdGVTZWxlY3RTdHlsZXMoe1xuICAgIGhhc1dhcm5pbmcsXG4gICAgaGFzRXJyb3IsXG4gICAgbWVudVBvcnRhbFpJbmRleCxcbiAgICBpc0NvbmRlbnNlZCxcbiAgICBpc1JlYWRPbmx5LFxuICAgIGlzRGlzYWJsZWQsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLnNlbGVjdFN0eWxlcyxcbiAgICBjb250cm9sOiAoYmFzZTogVEJhc2UsIHN0YXRlOiBSZWFjdFNlbGVjdFByb3BzKSA9PiAoe1xuICAgICAgLi4uc2VsZWN0U3R5bGVzLmNvbnRyb2woYmFzZSwgc3RhdGUpLFxuICAgICAgcGFkZGluZzogYDAgJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzI1fWAsXG4gICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzAnLFxuICAgICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlclJpZ2h0OiAnMCcsXG4gICAgICBtaW5XaWR0aDogJzgwcHgnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBib3JkZXJDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkRpc2FibGVkfSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlblJlYWRvbmx5fSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRXJyb3I7XG4gICAgICAgIGlmIChoYXNXYXJuaW5nKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGN1cnJlbmN5SGFzRm9jdXMpIHtcbiAgICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRm9jdXNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXQ7XG4gICAgICB9KSgpLFxuICAgICAgY3Vyc29yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuICdub3QtYWxsb3dlZCc7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gYGRlZmF1bHRgO1xuICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgfSkoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0pKCksXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0LFxuICAgICAgfSxcbiAgICAgICcmOmhvdmVyOm5vdCg6cmVhZC1vbmx5KTpub3QoOmRpc2FibGVkKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuSG92ZXJlZCxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgc2luZ2xlVmFsdWU6IChiYXNlOiBUQmFzZSkgPT4gKHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWF4V2lkdGg6ICdpbml0aWFsJyxcbiAgICAgIGNvbG9yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmZvbnRDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5XYXJuaW5nO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seTtcbiAgICAgICAgcmV0dXJuIGJhc2UuY29sb3I7XG4gICAgICB9KSgpLFxuICAgIH0pLFxuICAgIGRyb3Bkb3duSW5kaWNhdG9yOiAoKSA9PiAoe1xuICAgICAgZmlsbDogaXNSZWFkT25seVxuICAgICAgICA/IGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seVxuICAgICAgICA6IGRlc2lnblRva2Vucy5jb2xvck5ldXRyYWw0MCxcbiAgICB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFRDdXJyZW5jeUNvZGUgPSBrZXlvZiB0eXBlb2YgYWxsQ3VycmVuY2llcztcblxudHlwZSBUTW9uZXlDb25kaXRpb25hbFByb3BzID1cbiAgfCB7IHR5cGU6ICdoaWdoUHJlY2lzaW9uJzsgcHJlY2lzZUFtb3VudDogbnVtYmVyIH1cbiAgfCB7XG4gICAgICAvKipcbiAgICAgICAqIFVzdWFsbHkgZWl0aGVyIGEgYGNlbnRQcmVjaXNpb25gIG9yIGEgYGhpZ2hQcmVjaXNpb25gLlxuICAgICAgICovXG4gICAgICB0eXBlOiAnY2VudFByZWNpc2lvbic7XG4gICAgICBwcmVjaXNlQW1vdW50PzogbmV2ZXI7XG4gICAgfTtcbmV4cG9ydCB0eXBlIFRNb25leVZhbHVlID0ge1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGU7XG4gIGNlbnRBbW91bnQ6IG51bWJlcjtcbiAgZnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcbn0gJiBUTW9uZXlDb25kaXRpb25hbFByb3BzO1xuLy8gVGhlIE1vbmV5SW5wdXQgY29tcG9uZW50IGFsd2F5cyBvcGVyYXRlcyBvbiBhIHZhbHVlIGNvbnNpc3Rpbmcgb2Y6XG4vLyBgYGBcbi8vIHsgYW1vdW50OiBTdHJpbmcsIGN1cnJlbmN5Q29kZTogU3RyaW5nIH1cbi8vIGBgYFxuLy9cbi8vIFRoZSBhbW91bnQgbWF5IG9ubHkgdXNlIGEgZG90IGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbi8vIFRoZSBgY3VycmVuY3lDb2RlYCBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy9cbi8vIFRoZSBgTW9uZXlJbnB1dGAgZG9lcyBub3QgZG8gYW55IHZhbGlkYXRpb24gb24gaXRzIG93bi4gSXQgb25seSBzZXJ2ZXMgYXMgYSB3YXlcbi8vIHRvIGdldCB0aGUgYW1vdW50IGFuZCBgY3VycmVuY3lDb2RlYCBpbnB1dCBmcm9tIHRoZSB1c2VyLiBWYWxpZGF0aW9uIGlzIGFsd2F5c1xuLy8gdXAgdG8gdGhlIHBhcmVudC5cbi8vXG4vLyBUaGUgQ1RQIEFQSSBzdXBwb3J0cyB0d28gdHlwZXMgb2YgcHJpY2VzOiBgY2VudFByZWNpc2lvbmAgYW5kIGBoaWdoUHJlY2lzaW9uYC5cbi8vIFRoZSBgTW9uZXlJbnB1dGAgaXRzZWxmIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlc2UuIEhvd2V2ZXIsXG4vLyBpdCBoYXMgdHdvIHN0YXRpYyBtZXRob2RzIGRlZmluZWQgKGBjb252ZXJ0VG9Nb25leVZhbHVlYCBhbmQgYHBhcnNlTW9uZXlWYWx1ZWApLFxuLy8gd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGBNb25leUlucHV0YCB2YWx1ZSBhbmQgdGhlIGBNb25leVZhbHVlYFxuLy8gc3VwcG9ydGVkIGJ5IHRoZSBBUEkuXG4vLyBTb21lIHBsYWNlcyBpbiB0aGUgQVBJIGRvIG5vdCBzdXBwb3J0IGBoaWdoUHJlY2lzaW9uYCBwcmljZXMsIGJ1dCB0aGVcbi8vIGBjb252ZXJ0VG9Nb25leVZhbHVlIGB3aWxsIGFsd2F5cyByZXR1cm4gZWl0aGVyIGEgYGNlbnRQcmVjaXNpb24gYG9yIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQncyB1cCB0aGUgYE1vbmV5SW5wdXRgJ3MgcGFyZW50IHRvIHNob3cgYSB2YWxpZGF0aW9uXG4vLyBlcnJvciBpbiBjYXNlIGEgYGhpZ2hQcmVjaXNpb25gIHByaWNlIGlzIHVzZWQuXG4vL1xuLy8gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFzIHRvIGhhdmUgYGhpZ2hQcmVjaXNpb25gIHdoZW4gdGhlIG51bWJlciBvZiBzdXBwbGllZFxuLy8gZnJhY3Rpb24gZGlnaXRzIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0aGUgY3VycmVuY3kgdXNlcy4gRm9yXG4vLyBleGFtcGxlLCBgRVVSIDQyLjAwYCBpcyBhbHdheXMgYSBgY2VudFByZWNpc2lvbmAgcHJpY2UsIHdoaWxlIGBFVVIgNDIuMDAxYCBpcyBhbHdheXMgYVxuLy8gYGhpZ2hQcmVjaXNpb25gIHByaWNlLiBJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBgRVVSIDQyLjAwYCBhcyBhIGBoaWdoUHJlY2lzaW9uYFxuLy8gcHJpY2UuXG4vL1xuLy8gVGhlIGZpcnN0IHRpbWUgdGhlIGNvbXBvbmVudCByZW5kZXJzLCB3ZSB3YW50IHRvIHRyeSB0byBzaG93IHRoZSBgY2VudEFtb3VudGBcbi8vIGFzIGEgZm9ybWF0dGVkIG51bWJlci4gVG8gYWNoaWV2ZSB0aGlzLCB0aGUgYHBhcnNlTW9uZXlWYWx1ZWAgZnVuY3Rpb24gY2FuXG4vLyBiZSB1c2VkIHRvIHR1cm4gdGhlIEFQSSB2YWx1ZSBpbnRvIGEgdmFsdWUgdGhlIGBNb25leUlucHV0YCB1bmRlcnN0YW5kcy5cbi8vIER1cmluZyB0aGlzIHRyYW5zZm9ybWF0aW9uLCB0aGUgbW9uZXkgdmFsdWUgd2lsbCBnZXQgZm9ybWF0dGVkIGludG8gXCJhbW91bnRcIi5cbi8vXG4vLyBXaGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlLCB3ZSBkb24ndCB3YW50IHRvIGZvcm1hdCBhZ2Fpbi4gV2Ugb25seSBmb3JtYXRcbi8vIGluIGNhc2UgdGhlIHVzZXIgYmx1cnMgdGhlIGZpZWxkLiBUaGlzIGF2b2lkcyBtYW55IGVkZ2UgY2FzZXMgd2hlcmUgdGhlXG4vLyBmb3JtYXR0aW5nIHdvdWxkIG1lc3Mgd2l0aCB0aGUgdXNlcidzIGlucHV0LlxuLy9cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgY2VudFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gICBcInR5cGVcIjogXCJjZW50UHJlY2lzaW9uXCIsXG4vLyAgIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgIFwiY2VudEFtb3VudFwiOiA0MjAwLFxuLy8gICBcImZyYWN0aW9uRGlnaXRzXCI6IDJcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgNDIuMDBgLlxuLy9cbi8vIEEgZnVsbCBleGFtcGxlIG9mIGFuIGBNb25leVZhbHVlYCB3aXRoIGBoaWdoUHJlY2lzaW9uYCB3b3VsZCBiZVxuLy8gYGBgXG4vLyB7XG4vLyAgXCJ0eXBlXCI6IFwiaGlnaFByZWNpc2lvblwiLFxuLy8gIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgXCJjZW50QW1vdW50XCI6IDEsXG4vLyAgXCJwcmVjaXNlQW1vdW50XCI6IDEyMzQ1Nixcbi8vICBcImZyYWN0aW9uRGlnaXRzXCI6IDdcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgMC4wMTIzNDU2YFxuXG4vLyBQYXJzaW5nXG4vLyBTaW5jZSBtb3N0IHVzZXJzIGFyZSBub3QgY2FyZWZ1bCBhYm91dCBob3cgdGhleSBlbnRlciB2YWx1ZXMsIHdlIHdpbGwgcGFyc2Vcbi8vIGJvdGggYC5gIGFuZCBgLGAgYXMgZGVjaW1hbCBzZXBhcmF0b3JzLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLjAwMCwwMGAgd2UgcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLDAwMC4wMGAgd2UgYWxzbyBwYXJzZSBpdCBhcyBgMTAwMGAuXG4vL1xuLy8gVGhpcyBtZWFucyB0aGUgaGlnaGVzdCBhbW91bnQgYWx3YXlzIHdpbnMuIFdlIGRvIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBsYXN0XG4vLyBwb3NpdGlvbiBvZiBgLmAgYW5kIGAsYC4gV2hhdGV2ZXIgb2NjdXJzIGxhdGVyIGlzIHVzZWQgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuZXhwb3J0IGNvbnN0IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIgPSAocmF3QW1vdW50OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gIGxldCBmcmFjdGlvbnNTZXBhcmF0b3I7XG5cbiAgaWYgKGxvY2FsZSkge1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9ICgyLjUpIC8vIHdlIG5lZWQgYW55IG51bWJlciB3aXRoIGZyYWN0aW9ucywgc28gdGhhdCB3ZSBrbm93IHdoYXQgaXMgdGhlIGZyYWN0aW9uXG4gICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSAvLyBcInN5bWJvbFwiIGZvciB0aGUgcHJvdmlkZWQgbG9jYWxlXG4gICAgICAucmVwbGFjZSgvXFxkL2csICcnKTsgLy8gdGhlbiB3ZSByZW1vdmUgdGhlIG51bWJlcnMgYW5kIGtlZXAgdGhlIFwic3ltYm9sXCJcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0RG90ID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJy4nKTtcbiAgICBjb25zdCBsYXN0Q29tbWEgPSBTdHJpbmcocmF3QW1vdW50KS5sYXN0SW5kZXhPZignLCcpO1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9IGxhc3RDb21tYSA+IGxhc3REb3QgPyAnLCcgOiAnLic7XG4gIH1cbiAgZnJhY3Rpb25zU2VwYXJhdG9yID0gZnJhY3Rpb25zU2VwYXJhdG9yID09PSAnLicgPyAnXFxcXC4nIDogZnJhY3Rpb25zU2VwYXJhdG9yOyAvLyBoZXJlIHdlIGVzY2FwZSB0aGUgJy4nIHRvIHVzZSBpdCBhcyByZWdleFxuICAvLyBUaGUgcmF3IGFtb3VudCB3aXRoIG9ubHkgb25lIHNwYXJhdG9yXG4gIGNvbnN0IG5vcm1hbGl6ZWRBbW91bnQgPSBTdHJpbmcocmF3QW1vdW50KVxuICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFteLTAtOSR7ZnJhY3Rpb25zU2VwYXJhdG9yfV1gLCAnZycpLCAnJykgLy8gd2UganVzdCBrZWVwIHRoZSBudW1iZXJzIGFuZCB0aGUgZnJhY3Rpb24gc3ltYm9sXG4gICAgLnJlcGxhY2UoZnJhY3Rpb25zU2VwYXJhdG9yLCAnLicpOyAvLyB0aGVuIHdlIGNoYW5nZSB3aGF0ZXZlciBgZnJhY3Rpb25zU2VwYXJhdG9yYCB3YXMgdG8gYC5gIHNvIHdlIGNhbiBwYXJzZSBpdCBhcyBmbG9hdFxuXG4gIHJldHVybiBwYXJzZUZsb2F0KG5vcm1hbGl6ZWRBbW91bnQpO1xufTtcblxuLy8gVHVybnMgdGhlIHVzZXIgaW5wdXQgaW50byBhIHZhbHVlIHRoZSBNb25leUlucHV0IGNhbiBwYXNzIHVwIHRocm91Z2ggb25DaGFuZ2Vcbi8vIEluIGNhc2UgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgY29udGFpbmVkIGluIFwiYW1vdW50XCIgZXhjZWVkcyB0aGVcbi8vIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMsIGl0IHdpbGwgZW1pdCBhIHByaWNlIG9mXG4vLyB0eXBlIFwiaGlnaFByZWNpc2lvblwiIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgXCJjZW50UHJlY2lzaW9uXCIuXG4vLyBJdCB3aWxsIHJldHVybiBcIm51bGxcIiBpbiBjYXNlIGFuIGludmFsaWQgdmFsdWUgaXMgZW50ZXJlZC5cbi8vIFRoZSB2YWx1ZSBpcyBpbnZhbGlkIHdoZW5cbi8vICAtIG5vIGFtb3VudCB3YXMgZW50ZXJlZFxuLy8gIC0gYW4gaW52YWxpZCBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIG5vIGN1cnJlbmN5IHdhcyBzZWxlY3RlZFxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgXCJhbW91bnRcIiB0byBiZSBhIHRyaW1tZWQgdmFsdWUuXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb25leVZhbHVlID0gKFxuICByYXdBbW91bnQ6IHN0cmluZyxcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGN1cnJlbmN5Q29kZT86IFRDdXJyZW5jeUNvZGUgfCAnJ1xuKTogVE1vbmV5VmFsdWUgfCBudWxsID0+IHtcbiAgaWYgKCFjdXJyZW5jeUNvZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGN1cnJlbmN5ID0gYWxsQ3VycmVuY2llc1tjdXJyZW5jeUNvZGVdO1xuICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgLy8gVGhlIHVzZXIgbWF5IGVudGVyIGEgdmFsdWUgd2l0aCBhIGNvbW1hLCBkb3QsIG9yIGFwb3N0cm9waGUgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuICBpZiAocmF3QW1vdW50Lmxlbmd0aCA9PT0gMCB8fCAhaXNOdW1iZXJpc2gocmF3QW1vdW50KSkgcmV0dXJuIG51bGw7XG5cbiAgd2FybmluZyhcbiAgICBsb2NhbGUgfHwgY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMgIT09IDAsXG4gICAgYE1vbmV5SW5wdXQ6IEEgbG9jYWxlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBjdXJyZW5jeSBoYXMgbm8gZnJhY3Rpb24gZGlnaXRzICgke2N1cnJlbmN5Q29kZX0pYFxuICApO1xuICBjb25zdCBhbW91bnRBc051bWJlciA9IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIocmF3QW1vdW50LCBsb2NhbGUpO1xuICBpZiAoaXNOYU4oYW1vdW50QXNOdW1iZXIpKSByZXR1cm4gbnVsbDtcblxuICAvLyBUaGUgY2VudCBhbW91bnQgaXMgcm91bmRlZCB0byB0aGUgY3VycmVuY2llJ3MgZGVmYXVsdCBudW1iZXJcbiAgLy8gb2YgZnJhY3Rpb24gZGlnaXRzIGZvciBwcmljZXMgd2l0aCBoaWdoIHByZWNpc2lvbi5cbiAgLy9cbiAgLy8gQWRkaXRpb25hbGx5LCBKYXZhU2NyaXB0IGlzIHNvbWV0aW1lcyBpbmNvcnJlY3Qgd2hlbiBtdWx0aXBseWluZyBmbG9hdHMsXG4gIC8vICAgZS5nLiAyLjQ5ICogMTAwIC0+IDI0OS4wMDAwMDAwMDAwMDAwM1xuICAvLyBXaGlsZSBpbmFjY3VyYWN5IGZyb20gbXVsdGlwbHlpbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBpcyBhXG4gIC8vIGdlbmVyYWwgcHJvYmxlbSBpbiBKUywgd2UgY2FuIGF2b2lkIGl0IGJ5IGN1dHRpbmcgb2ZmIGFsbFxuICAvLyBkZWNpbWFscy4gVGhpcyBpcyBwb3NzaWJsZSBzaW5jZSBjZW50cyBpcyB0aGUgYmFzZSB1bml0LCBzbyB3ZVxuICAvLyBvcGVyYXRlIG9uIGludGVnZXJzIGFueXdheXNcbiAgLy8gQWxzbyB3ZSBzaG91bGQgdGhlIHJvdW5kIHRoZSB2YWx1ZSB0byBlbnN1cmUgdGhhdCB3ZSBjb21lIGNsb3NlXG4gIC8vIHRvIHRoZSBuZWFyZXN0IGRlY2ltYWwgdmFsdWVcbiAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vY29tbWVyY2V0b29scy9tZXJjaGFudC1jZW50ZXItZnJvbnRlbmQvcHVsbC83NzBcbiAgY29uc3QgY2VudEFtb3VudCA9IE1hdGgudHJ1bmMoXG4gICAgTWF0aC5yb3VuZChhbW91bnRBc051bWJlciAqIDEwICoqIGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKVxuICApO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPVxuICAgIC8vIFRoZSBjb252ZXJzaW9uIHRvIGEgc3RyaW5nIHdpbGwgYWx3YXlzIHVzZSBhIGRvdCBhcyB0aGUgc2VwYXJhdG9yLlxuICAgIC8vIFRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgYSBjb21tYS5cbiAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSA9PT0gLTFcbiAgICAgID8gMFxuICAgICAgOiBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmxlbmd0aCAtIFN0cmluZyhhbW91bnRBc051bWJlcikuaW5kZXhPZignLicpIC0gMTtcblxuICBpZiAoZnJhY3Rpb25EaWdpdHNPZkFtb3VudCA+IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdoaWdoUHJlY2lzaW9uJyxcbiAgICAgIGN1cnJlbmN5Q29kZSxcbiAgICAgIGNlbnRBbW91bnQsXG4gICAgICBwcmVjaXNlQW1vdW50OiBwYXJzZUludChcbiAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGNvbnZlcnQgIGEgbnVtYmVyIGxpa2UgOC4wNjY2NTIgdG8gaXRzIGNlbnRhbW91bnRcbiAgICAgICAgLy8gV2UgY291bGQgZG8gdGhhdCBieSBtdWx0aXBseWluZyBpdCB3aXRoIDEwICoqIG51bWJlci1vZi1mcmFjdGlvbi1kaWdpdHNcbiAgICAgICAgLy8gYnV0IHRoZW4gd2UnbGwgcnVuIGludG8gcHJvYmxlbXMgd2l0aCBKYXZhU2NyaXB0J3MgZmxvYXRpbmcgcG9pbnRcbiAgICAgICAgLy8gbnVtYmVyIHByZWNpc2lvbiBhbmQgZW5kIHVwIHdpdGggODA2NjY1MS45OTk5OTk5LCBhbmQgdGhlbiBwYXJzZUludFxuICAgICAgICAvLyBjdXRzIG9mZiB0aGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBTbyBpbnN0ZWFkIG9mIHVzaW5nIG1hdGhzIHRvIGNvbnZlcnQgdGhlIG51bWJlciwgd2UganVzdCByZXBsYWNlXG4gICAgICAgIC8vIHRoZSBkb3QgaW5zaWRlIHRoZSBudW1iZXIgd2hpY2ggZG9lcyB0aGUgc2FtZSB0aGluZy5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIFwiLFwiIGFzIHdlbGwsIGFzIG51bWJlcnMgYWx3YXlzIHVzIGEgZG90XG4gICAgICAgIC8vIHdoZW4gY29udmVydGVkIHVzaW5nIFN0cmluZygpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgbWF0aGVtYXRpY2FsIHdheTogYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgICAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLnJlcGxhY2UoJy4nLCAnJyksXG4gICAgICAgIDEwXG4gICAgICApLFxuICAgICAgZnJhY3Rpb25EaWdpdHM6IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICBjZW50QW1vdW50LFxuICAgIGZyYWN0aW9uRGlnaXRzOiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cyxcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVFbXB0eU1vbmV5VmFsdWUgPSAoY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlKTogVE1vbmV5VmFsdWUgPT4gKHtcbiAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICBjdXJyZW5jeUNvZGUsXG4gIGNlbnRBbW91bnQ6IE5hTixcbiAgZnJhY3Rpb25EaWdpdHM6IDIsXG59KTtcblxuY29uc3QgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZSA9IChtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSkgPT5cbiAgbW9uZXlWYWx1ZS50eXBlID09PSAnaGlnaFByZWNpc2lvbidcbiAgICA/IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCAvIDEwICoqIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHNcbiAgICA6IG1vbmV5VmFsdWUuY2VudEFtb3VudCAvXG4gICAgICAxMCAqKiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuLy8gZ2V0cyBjYWxsZWQgd2l0aCBhIHN0cmluZyBhbmQgc2hvdWxkIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmdcbmNvbnN0IGZvcm1hdEFtb3VudCA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGVcbikgPT4ge1xuICAvLyBmYWxsYmFjayBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCBlbnRlciBhbiBhbW91bnQgeWV0IChvciBpdCdzIGludmFsaWQpXG4gIGNvbnN0IG1vbmV5VmFsdWUgPVxuICAgIGNyZWF0ZU1vbmV5VmFsdWUocmF3QW1vdW50LCBsb2NhbGUsIGN1cnJlbmN5Q29kZSkgfHxcbiAgICBjcmVhdGVFbXB0eU1vbmV5VmFsdWUoY3VycmVuY3lDb2RlKTtcblxuICBjb25zdCBhbW91bnQgPSBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gbW9uZXlWYWx1ZS5wcmVjaXNlQW1vdW50XG4gICAgPyBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuICByZXR1cm4gaXNOYU4oYW1vdW50KVxuICAgID8gJydcbiAgICA6IGFtb3VudC50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0cyB9KTtcbn07XG5cbmNvbnN0IGdldEFtb3VudElucHV0TmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uYW1vdW50YCA6IHVuZGVmaW5lZDtcbmNvbnN0IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lID0gKG5hbWU/OiBzdHJpbmcpID0+XG4gIG5hbWUgPyBgJHtuYW1lfS5jdXJyZW5jeUNvZGVgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBUVmFsdWUgPSB7XG4gIGFtb3VudDogc3RyaW5nO1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGUgfCAnJztcbn07XG5cbnR5cGUgVEN1c3RvbUV2ZW50ID0ge1xuICB0YXJnZXQ6IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICB9O1xuICBwZXJzaXN0PzogKCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgVE1vbmV5SW5wdXRQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFVzZWQgYXMgSFRNTCBpZCBwcm9wZXJ0eS4gQW4gaWQgaXMgYXV0by1nZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgYGF1dG9jb21wbGV0ZWAgcHJvcGVydHlcbiAgICovXG4gIGF1dG9Db21wbGV0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlIGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICAgKi9cbiAgJ2FyaWEtaW52YWxpZCc/OiBib29sZWFuO1xuICAvKipcbiAgICogSFRNTCBJRCBvZiBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYW4gZXJyb3IgbWVzc2FnZSByZWxhdGVkIHRvIHRoZSBpbnB1dC5cbiAgICovXG4gICdhcmlhLWVycm9ybWVzc2FnZSc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHVzZWQgdG8gY3JlYXRlIGEgSFRNTCBgbmFtZWAgcHJvcGVydHkgZm9yIHRoZSBhbW91bnQgaW5wdXQgZmllbGQgKGAke25hbWV9LmFtb3VudGApIGFuZCB0aGUgY3VycmVuY3kgZHJvcGRvd24gKGAke25hbWV9LmN1cnJlbmN5Q29kZWApLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBpbnB1dC4gQ29uc2lzdHMgb2YgdGhlIGN1cnJlbmN5IGNvZGUgYW5kIGFuIGFtb3VudC4gYGFtb3VudGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhbW91bnQuIEEgZG90IGhhcyB0byBiZSB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgICovXG4gIHZhbHVlOiBUVmFsdWU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvc3NpYmxlIGN1cnJlbmNpZXMuIFdoZW4gbm90IHByb3ZpZGVkIG9yIGVtcHR5LCB0aGUgY29tcG9uZW50IHJlbmRlcnMgYSBsYWJlbCB3aXRoIHRoZSB2YWx1ZSdzIGN1cnJlbmN5IGluc3RlYWQgb2YgYSBkcm9wZG93bi5cbiAgICovXG4gIGN1cnJlbmNpZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBibHVycmVkXG4gICAqL1xuICBvbkJsdXI/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGlucHV0IGlzIGZvY3VzZWRcbiAgICovXG4gIG9uRm9jdXM/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlZHVjZSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNvbXBvbmVudCBmb3IgYSB1aSBjb21wYWN0IHZhcmlhbnRcbiAgICovXG4gIGlzQ29uZGVuc2VkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBjYW5ub3QgYmUgbW9kaWZpZWQgKGUuZyBub3QgYXV0aG9yaXplZCwgb3IgY2hhbmdlcyBjdXJyZW50bHkgc2F2aW5nKS5cbiAgICovXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkIGlzIGRpc3BsYXlpbmcgcmVhZC1vbmx5IGNvbnRlbnRcbiAgICovXG4gIGlzUmVhZE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogRm9jdXMgdGhlIGlucHV0IG9uIGluaXRpYWwgcmVuZGVyXG4gICAqL1xuICBpc0F1dG9mb2N1c3NlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgZXZlbnQgb2YgdGhlIGlucHV0IG9yIGRyb3Bkb3duIHdoZW4gZWl0aGVyIHRoZSBjdXJyZW5jeSBvciB0aGUgYW1vdW50IGhhdmUgY2hhbmdlZC5cbiAgICovXG4gIG9uQ2hhbmdlPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBEb20gZWxlbWVudCB0byBwb3J0YWwgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHRvXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51UG9ydGFsVGFyZ2V0PzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVBvcnRhbFRhcmdldCddO1xuICAvKipcbiAgICogei1pbmRleCB2YWx1ZSBmb3IgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHBvcnRhbFxuICAgKiA8YnI+XG4gICAqIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBtZW51UG9ydGFsVGFyZ2V0YFxuICAgKi9cbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhlIG1lbnUgc2hvdWxkIGJsb2NrIHNjcm9sbCB3aGlsZSBvcGVuXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51U2hvdWxkQmxvY2tTY3JvbGw/OiBSZWFjdFNlbGVjdFByb3BzWydtZW51U2hvdWxkQmxvY2tTY3JvbGwnXTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IGlucHV0IGhhcyBlcnJvcnNcbiAgICovXG4gIGhhc0Vycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2wgdG8gaW5kaWNhdGUgb24gdGhlIGlucHV0IGlmIHRoZXJlIGFyZSBzZWxlY3RlZCB2YWx1ZXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgaW52YWxpZFxuICAgKi9cbiAgaGFzV2FybmluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93cyBoaWdoIHByZWNpc2lvbiBiYWRnZSBpbiBjYXNlIGN1cnJlbnQgdmFsdWUgdXNlcyBoaWdoIHByZWNpc2lvbi5cbiAgICovXG4gIGhhc0hpZ2hQcmVjaXNpb25CYWRnZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHNpemUgbGltaXQgb2YgdGhlIGlucHV0IGZpZWxkcy5cbiAgICovXG4gIGhvcml6b250YWxDb25zdHJhaW50PzpcbiAgICB8IDNcbiAgICB8IDRcbiAgICB8IDVcbiAgICB8IDZcbiAgICB8IDdcbiAgICB8IDhcbiAgICB8IDlcbiAgICB8IDEwXG4gICAgfCAxMVxuICAgIHwgMTJcbiAgICB8IDEzXG4gICAgfCAxNFxuICAgIHwgMTVcbiAgICB8IDE2XG4gICAgfCAnc2NhbGUnXG4gICAgfCAnYXV0byc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVuY3kgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgTW9uZXlJbnB1dCA9ICh7XG4gIGN1cnJlbmNpZXMgPSBbXSxcbiAgaG9yaXpvbnRhbENvbnN0cmFpbnQgPSAnc2NhbGUnLFxuICBtZW51UG9ydGFsWkluZGV4ID0gMSxcbiAgLi4ucHJvcHNcbn06IFRNb25leUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW2N1cnJlbmN5SGFzRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdID0gdXNlVG9nZ2xlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYW1vdW50SGFzRm9jdXMsIHRvZ2dsZUFtb3VudEhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBhbW91bnRJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBtb25leUlucHV0SWQgPSB1c2VGaWVsZElkKHByb3BzLmlkLCBtb25leUlucHV0U2VxdWVudGlhbElkKTtcblxuICBpZiAoIXByb3BzLmlzUmVhZE9ubHkpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ01vbmV5SW5wdXQ6IFwib25DaGFuZ2VcIiBpcyByZXF1aXJlZCB3aGVuIGlzIG5vdCByZWFkIG9ubHkuJ1xuICAgICk7XG4gIH1cblxuICB3YXJuSWZNZW51UG9ydGFsUHJvcHNBcmVNaXNzaW5nKHtcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIG1lbnVQb3J0YWxUYXJnZXQ6IHByb3BzLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgY29tcG9uZW50TmFtZTogJ01vbmV5SW5wdXQnLFxuICB9KTtcblxuICBjb25zdCB7IG9uRm9jdXMgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFt0b2dnbGVBbW91bnRIYXNGb2N1cywgb25Gb2N1cywgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXSk7XG5cbiAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUFtb3VudEJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgYW1vdW50ID0gcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKTtcbiAgICB0b2dnbGVBbW91bnRIYXNGb2N1cyhmYWxzZSk7XG4gICAgLy8gU2tpcCBmb3JtYXR0aW5nIGZvciBlbXB0eSB2YWx1ZSBvciB3aGVuIHRoZSBpbnB1dCBpcyB1c2VkIHdpdGggYW5cbiAgICAvLyB1bmtub3duIGN1cnJlbmN5LlxuICAgIGlmIChcbiAgICAgIGFtb3VudC5sZW5ndGggPiAwICYmXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUgJiZcbiAgICAgIGFsbEN1cnJlbmNpZXNbcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXVxuICAgICkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkQW1vdW50ID0gZm9ybWF0QW1vdW50KFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGVcbiAgICAgICk7XG5cbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgZW50ZXJlZCBhIHZhbHVlIHdpdGggY2VudFByZWNpc2lvbiwgd2UgY2FuIGZvcm1hdFxuICAgICAgLy8gdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0aGF0IGN1cnJlbmN5LCBlLmcuIDIwLjEgdG8gMjAuMTBcbiAgICAgIGlmIChTdHJpbmcoZm9ybWF0dGVkQW1vdW50KSAhPT0gYW1vdW50KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBhbiBldmVudCB3aXRoIHRoZSBub3cgZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGZha2VFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBmb3JtYXR0ZWRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGludGwubG9jYWxlLFxuICAgIG9uQ2hhbmdlLFxuICAgIG1vbmV5SW5wdXRJZCxcbiAgICBwcm9wcy5uYW1lLFxuICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMsXG4gIF0pO1xuXG4gIGNvbnN0IGhhbmRsZUFtb3VudENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2hhbmdlRXZlbnQgfCBGb2N1c0V2ZW50KSA9PiB7XG4gICAgICBpZiAoaXNOdW1iZXJpc2goKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWUpKSB7XG4gICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiB7IHZhbHVlOiBUQ3VycmVuY3lDb2RlIH0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbmN5Q29kZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgIGlmIChwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUgIT09IGN1cnJlbmN5Q29kZSkge1xuICAgICAgICAvLyBXaGVuIHRoZSB1c2VyIGNoYW5nZXMgZnJvbSBhIGN1cnJlbmN5IHdpdGggMyBmcmFjdGlvbiBkaWdpdHMgdG9cbiAgICAgICAgLy8gYSBjdXJyZW5jeSB3aXRoIDIgZnJhY3Rpb24gZGlnaXRzLCBhbmQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgd2FzXG4gICAgICAgIC8vIFwiOS4wMDBcIiAoOSksIHRoZW4gaXQgc2hvdWxkIGNoYW5nZSB0byBcIjkuMDBcIiB0byByZWZsZWN0IHRoZSBuZXdcbiAgICAgICAgLy8gY3VycmVuY3kncyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzLlxuICAgICAgICAvLyBXaGVuIHRoZSBjdXJyZW5jeSB3YXMgYSBoaWdoLXByZWNpc2lvbiBwcmljZSwgdGhlbiBubyBkaWdpdHMgc2hvdWxkXG4gICAgICAgIC8vIGJlIGxvc3RcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkQW1vdW50ID0gZm9ybWF0QW1vdW50KFxuICAgICAgICAgIHByb3BzLnZhbHVlLmFtb3VudC50cmltKCksXG4gICAgICAgICAgaW50bC5sb2NhbGUsXG4gICAgICAgICAgY3VycmVuY3lDb2RlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRoZSB1c2VyIGNvdWxkIGJlIGNoYW5naW5nIHRoZSBjdXJyZW5jeSBiZWZvcmUgZW50ZXJpbmcgYW55IGFtb3VudCxcbiAgICAgICAgLy8gb3Igd2hpbGUgdGhlIGFtb3VudCBpcyBpbnZhbGlkLiBJbiB0aGVzZSBjYXNlcywgd2UgZG9uJ3QgYXR0ZW1wdCB0b1xuICAgICAgICAvLyBmb3JtYXQgdGhlIGFtb3VudC5cbiAgICAgICAgY29uc3QgbmV4dEFtb3VudCA9IGlzTmFOKE51bWJlcihmb3JtYXR0ZWRBbW91bnQpKVxuICAgICAgICAgID8gcHJvcHMudmFsdWUuYW1vdW50XG4gICAgICAgICAgOiBmb3JtYXR0ZWRBbW91bnQ7XG5cbiAgICAgICAgLy8gY2hhbmdlIGN1cnJlbmN5IGNvZGVcbiAgICAgICAgY29uc3QgZmFrZUN1cnJlbmN5RXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbmN5Q29kZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZT8uKGZha2VDdXJyZW5jeUV2ZW50KTtcblxuICAgICAgICAvLyBjaGFuZ2UgYW1vdW50IGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAocHJvcHMudmFsdWUuYW1vdW50ICE9PSBuZXh0QW1vdW50KSB7XG4gICAgICAgICAgb25DaGFuZ2U/Lih7XG4gICAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgICAgdmFsdWU6IG5leHRBbW91bnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYW1vdW50SW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGludGwubG9jYWxlLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBtb25leUlucHV0SWQsXG4gICAgICBwcm9wcy5uYW1lLFxuICAgICAgcHJvcHMudmFsdWUuYW1vdW50LFxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDdXJyZW5jeUZvY3VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvbkZvY3VzKVxuICAgICAgb25Gb2N1cyh7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKHRydWUpO1xuICB9LCBbb25Gb2N1cywgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cywgcHJvcHMubmFtZSwgbW9uZXlJbnB1dElkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMoZmFsc2UpO1xuICB9LCBbdG9nZ2xlQ3VycmVuY3lIYXNGb2N1c10pO1xuXG4gIGNvbnN0IGhhc05vQ3VycmVuY2llcyA9IGN1cnJlbmNpZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBoYXNGb2N1cyA9IGN1cnJlbmN5SGFzRm9jdXMgfHwgYW1vdW50SGFzRm9jdXM7XG4gIGNvbnN0IGN1cnJlbmN5U2VsZWN0U3R5bGVzID0gY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMoe1xuICAgIGhhc1dhcm5pbmc6IHByb3BzLmhhc1dhcm5pbmcsXG4gICAgaGFzRXJyb3I6IHByb3BzLmhhc0Vycm9yLFxuICAgIGlzQ29uZGVuc2VkOiBwcm9wcy5pc0NvbmRlbnNlZCxcbiAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlzUmVhZE9ubHk6IHByb3BzLmlzUmVhZE9ubHksXG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBjdXJyZW5jeUhhc0ZvY3VzLFxuICB9KTtcbiAgY29uc3Qgb3B0aW9ucyA9IGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeUNvZGUpID0+ICh7XG4gICAgbGFiZWw6IGN1cnJlbmN5Q29kZSxcbiAgICB2YWx1ZTogY3VycmVuY3lDb2RlLFxuICB9KSk7XG5cbiAgY29uc3Qgb3B0aW9uID0gKCgpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKFxuICAgICAgKG9wdGlvbkNhbmRpZGF0ZSkgPT4gb3B0aW9uQ2FuZGlkYXRlLnZhbHVlID09PSBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGVcbiAgICApO1xuICAgIGlmIChtYXRjaGVkT3B0aW9uKSByZXR1cm4gbWF0Y2hlZE9wdGlvbjtcbiAgICAvLyBlbnN1cmUgYW4gb3B0aW9uIGlzIGZvdW5kLCBldmVuIHdoZW4gdGhlIGN1cnJlbmNpZXMgZG9uJ3QgaW5jbHVkZVxuICAgIC8vIHRoZSBtb25leSB2YWx1ZSdzIGN1cnJlbmN5Q29kZVxuICAgIGlmIChwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUudHJpbSgpICE9PSAnJylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgICB9O1xuICAgIHJldHVybiBudWxsO1xuICB9KSgpO1xuXG4gIGNvbnN0IGlzSGlnaFByZWNpc2lvbiA9XG4gICAgIU1vbmV5SW5wdXQuaXNFbXB0eShwcm9wcy52YWx1ZSkgJiZcbiAgICBNb25leUlucHV0LmlzSGlnaFByZWNpc2lvbihwcm9wcy52YWx1ZSwgaW50bC5sb2NhbGUpO1xuXG4gIGNvbnN0IHsgb25CbHVyIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQmx1ciA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuICAgICAgLy8gZW5zdXJlcyB0aGF0IGJvdGggZmllbGRzIGFyZSBtYXJrZWQgYXMgdG91Y2hlZCB3aGVuIG9uZSBvZiB0aGVtXG4gICAgICAvLyBpcyBibHVycmVkXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgIWNvbnRhaW5lclJlZi5jdXJyZW50Py5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0IGFzIE5vZGUpXG4gICAgICApIHtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25CbHVyLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgVG9vbHRpcFBvcnRhbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZW1haW5pbmdQcm9wczogVFRvb2x0aXBQcm9wcyAmIHsgaWQ6IHN0cmluZyB9KSA9PiAoXG4gICAgICA8UG9ydGFsIHsuLi5yZW1haW5pbmdQcm9wc30gaWQ9e3Byb3BzLmlkIX0gLz5cbiAgICApLFxuICAgIFtwcm9wcy5pZF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDb25zdHJhaW50cy5Ib3Jpem9udGFsIG1heD17aG9yaXpvbnRhbENvbnN0cmFpbnR9PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGB9XG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9uZXktaW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgb25CbHVyPXsoZXZlbnQpID0+XG4gICAgICAgICAgaGFuZGxlQ29udGFpbmVyQmx1cihldmVudCBhcyBGb2N1c0V2ZW50PEhUTUxEaXZFbGVtZW50PilcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICB7aGFzTm9DdXJyZW5jaWVzID8gKFxuICAgICAgICAgIDxDdXJyZW5jeUxhYmVsXG4gICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCkgYXMgc3RyaW5nfVxuICAgICAgICAgICAgaXNDb25kZW5zZWQ9e3Byb3BzLmlzQ29uZGVuc2VkfVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzUmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbiAmJiBvcHRpb24ubGFiZWx9XG4gICAgICAgICAgPC9DdXJyZW5jeUxhYmVsPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGlucHV0SWQ9e01vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICBuYW1lPXtnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKX1cbiAgICAgICAgICAgIHZhbHVlPXtvcHRpb259XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0N1cnJlbmN5SW5wdXREaXNhYmxlZCB8fCBwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNTZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgU2luZ2xlVmFsdWU6IChpbm5lclByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8U2luZ2xlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgey4uLmlubmVyUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIElucHV0OiAob3duUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgIDxjb21wb25lbnRzLklucHV0IHsuLi5vd25Qcm9wc30gcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9IC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBEcm9wZG93bkluZGljYXRvcjogcHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgOiBEcm9wZG93bkluZGljYXRvcixcbiAgICAgICAgICAgICAgfSBhcyBSZWFjdFNlbGVjdFByb3BzWydjb21wb25lbnRzJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICBtZW51SXNPcGVuPXtwcm9wcy5pc1JlYWRPbmx5ID8gZmFsc2UgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgICAgICBzdHlsZXM9e2N1cnJlbmN5U2VsZWN0U3R5bGVzIGFzIFJlYWN0U2VsZWN0UHJvcHNbJ3N0eWxlcyddfVxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlQ3VycmVuY3lGb2N1c31cbiAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e3Byb3BzLm1lbnVQb3J0YWxUYXJnZXR9XG4gICAgICAgICAgICBtZW51U2hvdWxkQmxvY2tTY3JvbGw9e3Byb3BzLm1lbnVTaG91bGRCbG9ja1Njcm9sbH1cbiAgICAgICAgICAgIG1lbnVQbGFjZW1lbnQ9XCJhdXRvXCJcbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQ3VycmVuY3lCbHVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUN1cnJlbmN5Q2hhbmdlIGFzIFJlYWN0U2VsZWN0UHJvcHNbJ29uQ2hhbmdlJ119XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImN1cnJlbmN5LWRyb3Bkb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e2Ftb3VudElucHV0UmVmfVxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgICAgICBuYW1lPXtnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVBbW91bnRGb2N1c31cbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZS5hbW91bnR9XG4gICAgICAgICAgICBjc3M9e1tcbiAgICAgICAgICAgICAgZ2V0QW1vdW50SW5wdXRTdHlsZXMoeyAuLi5wcm9wcywgaGFzRm9jdXMgfSksXG4gICAgICAgICAgICAgIC8vIGFjY291bnRzIGZvciBzaXplIG9mIGljb25cbiAgICAgICAgICAgICAgcHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmXG4gICAgICAgICAgICAgICAgaXNIaWdoUHJlY2lzaW9uICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzQwfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICBjdXJyZW5jeUhhc0ZvY3VzICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWR9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFtb3VudENoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQW1vdW50Qmx1cn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmlzQXV0b2ZvY3Vzc2VkfVxuICAgICAgICAgICAgey4uLmZpbHRlckRhdGFBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQsXG4gICAgICAgICAgICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvKiBBUklBICovXG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3Byb3BzWydhcmlhLWludmFsaWQnXX1cbiAgICAgICAgICAgIGFyaWEtZXJyb3JtZXNzYWdlPXtwcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiYgaXNIaWdoUHJlY2lzaW9uICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHshcHJvcHMuaXNEaXNhYmxlZCAmJiA8ZGl2IGlkPXtnZXRQb3J0YWxJZChwcm9wcy5pZCl9IC8+fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMoe1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgb2ZmPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wLWVuZFwiXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgbmVnYXRpdmUgbWFyZ2luIHRvIG1ha2UgdXAgZm9yIHRoZSBwYWRkaW5nIGluIHRoZSBUb29sdGlwIFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRvb2x0aXAgaXMgZmx1c2ggd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYCR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gLSR7ZGVzaWduVG9rZW5zLnNwYWNpbmcxMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAwYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmhpZ2hQcmVjaXNpb24pfVxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgICAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFBvcnRhbCBhcyBDb21wb25lbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBXcmFwcGVyQ29tcG9uZW50OiBUb29sdGlwV3JhcHBlcixcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEZyYWN0aW9uRGlnaXRzSWNvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuaXNEaXNhYmxlZCA/ICduZXV0cmFsNjAnIDogJ2luZm8nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnN0cmFpbnRzLkhvcml6b250YWw+XG4gICk7XG59O1xuXG5Nb25leUlucHV0LmRpc3BsYXlOYW1lID0gJ01vbmV5SW5wdXQnO1xuXG5Nb25leUlucHV0LmdldEFtb3VudElucHV0SWQgPSBnZXRBbW91bnRJbnB1dE5hbWU7XG5cbk1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkID0gZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWU7XG5cbk1vbmV5SW5wdXQuY29udmVydFRvTW9uZXlWYWx1ZSA9ICh2YWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZykgPT5cbiAgY3JlYXRlTW9uZXlWYWx1ZShcbiAgICB0eXBlb2YgdmFsdWUuYW1vdW50ID09PSAnc3RyaW5nJyA/IHZhbHVlLmFtb3VudC50cmltKCkgOiAnJyxcbiAgICBsb2NhbGUsXG4gICAgdmFsdWUuY3VycmVuY3lDb2RlXG4gICk7XG5cbk1vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlID0gKFxuICBtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSxcbiAgbG9jYWxlOiBzdHJpbmdcbik6IFRWYWx1ZSA9PiB7XG4gIGlmICghbW9uZXlWYWx1ZSkgcmV0dXJuIHsgY3VycmVuY3lDb2RlOiAnJywgYW1vdW50OiAnJyB9O1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBBIGxvY2FsZSBtdXN0IGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50J1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIG1vbmV5VmFsdWUgPT09ICdvYmplY3QnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBiZSBwYXNzZWQgYXMgYW4gb2JqZWN0IG9yIGJlIHVuZGVmaW5lZCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJjdXJyZW5jeUNvZGVcIidcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIGhhcyhhbGxDdXJyZW5jaWVzLCBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IHVzZSBrbm93biBjdXJyZW5jeSBjb2RlJ1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgLy8gaGlnaFByZWNpc2lvbiBvciBjZW50UHJlY2lzaW9uIHZhbHVlcyBtdXN0IGJlIHNldFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmNlbnRBbW91bnQgPT09ICdudW1iZXInIHx8XG4gICAgICAodHlwZW9mIG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHMgPT09ICdudW1iZXInKSxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgY29udGFpbiBcImFtb3VudFwiJ1xuICApO1xuXG4gIGNvbnN0IGFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzLFxuICAgIH0pLFxuICAgIGxvY2FsZSxcbiAgICBtb25leVZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG4gIHJldHVybiB7IGFtb3VudCwgY3VycmVuY3lDb2RlOiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSB9O1xufTtcblxuTW9uZXlJbnB1dC5pc0VtcHR5ID0gKGZvcm1WYWx1ZTogVFZhbHVlKSA9PlxuICAhZm9ybVZhbHVlIHx8XG4gIGZvcm1WYWx1ZS5hbW91bnQudHJpbSgpID09PSAnJyB8fFxuICBmb3JtVmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSA9PT0gJyc7XG5cbk1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uID0gKGZvcm1WYWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB3YXJuaW5nKFxuICAgICFNb25leUlucHV0LmlzRW1wdHkoZm9ybVZhbHVlKSxcbiAgICAnTW9uZXlWYWx1ZS5pc0hpZ2hQcmVjaXNpb24gbWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBtb25leSB2YWx1ZS4nXG4gICk7XG4gIGNvbnN0IG1vbmV5VmFsdWUgPSBNb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUoZm9ybVZhbHVlLCBsb2NhbGUpO1xuICByZXR1cm4gbW9uZXlWYWx1ZT8udHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nO1xufTtcblxudHlwZSBUVG91Y2hlZCA9IHtcbiAgYW1vdW50PzogYm9vbGVhbjtcbiAgY3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbn07XG5cbk1vbmV5SW5wdXQuaXNUb3VjaGVkID0gKHRvdWNoZWQ/OiBUVG91Y2hlZCkgPT5cbiAgQm9vbGVhbih0b3VjaGVkICYmIHRvdWNoZWQuY3VycmVuY3lDb2RlICYmIHRvdWNoZWQuYW1vdW50KTtcblxuZXhwb3J0IGRlZmF1bHQgTW9uZXlJbnB1dDtcbiJdfQ== */",
775
773
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
776
774
  });
777
775
  const moneyInputSequentialId = utils.createSequentialId('money-input-');
@@ -784,25 +782,11 @@ const Portal = props => {
784
782
  }
785
783
  return null;
786
784
  };
787
- Portal.propTypes = {
788
- id: _pt__default["default"].string.isRequired,
789
- children: _pt__default["default"].node,
790
- isCondensed: _pt__default["default"].bool,
791
- isDisabled: _pt__default["default"].bool,
792
- isReadOnly: _pt__default["default"].bool
793
- };
794
785
  const CurrencyLabel = props => jsxRuntime.jsx("label", {
795
786
  htmlFor: props.id,
796
787
  css: getCurrencyLabelStyles(props),
797
788
  children: props.children
798
789
  });
799
- CurrencyLabel.propTypes = process.env.NODE_ENV !== "production" ? {
800
- id: _pt__default["default"].string.isRequired,
801
- children: _pt__default["default"].node,
802
- isCondensed: _pt__default["default"].bool,
803
- isDisabled: _pt__default["default"].bool,
804
- isReadOnly: _pt__default["default"].bool
805
- } : {};
806
790
  CurrencyLabel.displayName = 'CurrencyLabel';
807
791
  const SingleValue = _ref3 => {
808
792
  let id = _ref3.id,
@@ -814,10 +798,6 @@ const SingleValue = _ref3 => {
814
798
  })
815
799
  }));
816
800
  };
817
- SingleValue.propTypes = process.env.NODE_ENV !== "production" ? {
818
- id: _pt__default["default"].string,
819
- children: _pt__default["default"].node
820
- } : {};
821
801
  SingleValue.displayName = 'SingleValue';
822
802
  // overwrite styles of createSelectStyles
823
803
  const createCurrencySelectStyles = _ref4 => {
@@ -1068,7 +1048,7 @@ var _ref = process.env.NODE_ENV === "production" ? {
1068
1048
  styles: "position:relative;width:100%"
1069
1049
  } : {
1070
1050
  name: "h5hvsa-MoneyInput",
1071
- styles: "position:relative;width:100%;label:MoneyInput;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzMEJrQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChpc051bWJlcmlzaChldmVudC50YXJnZXQudmFsdWUpKSB7XG4gICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVuY3lDb2RlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSAhPT0gY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2hhbmdlcyBmcm9tIGEgY3VycmVuY3kgd2l0aCAzIGZyYWN0aW9uIGRpZ2l0cyB0b1xuICAgICAgICAvLyBhIGN1cnJlbmN5IHdpdGggMiBmcmFjdGlvbiBkaWdpdHMsIGFuZCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSB3YXNcbiAgICAgICAgLy8gXCI5LjAwMFwiICg5KSwgdGhlbiBpdCBzaG91bGQgY2hhbmdlIHRvIFwiOS4wMFwiIHRvIHJlZmxlY3QgdGhlIG5ld1xuICAgICAgICAvLyBjdXJyZW5jeSdzIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMuXG4gICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbmN5IHdhcyBhIGhpZ2gtcHJlY2lzaW9uIHByaWNlLCB0aGVuIG5vIGRpZ2l0cyBzaG91bGRcbiAgICAgICAgLy8gYmUgbG9zdFxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRBbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgICAgICAgcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKSxcbiAgICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgICBjdXJyZW5jeUNvZGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlIHVzZXIgY291bGQgYmUgY2hhbmdpbmcgdGhlIGN1cnJlbmN5IGJlZm9yZSBlbnRlcmluZyBhbnkgYW1vdW50LFxuICAgICAgICAvLyBvciB3aGlsZSB0aGUgYW1vdW50IGlzIGludmFsaWQuIEluIHRoZXNlIGNhc2VzLCB3ZSBkb24ndCBhdHRlbXB0IHRvXG4gICAgICAgIC8vIGZvcm1hdCB0aGUgYW1vdW50LlxuICAgICAgICBjb25zdCBuZXh0QW1vdW50ID0gaXNOYU4oTnVtYmVyKGZvcm1hdHRlZEFtb3VudCkpXG4gICAgICAgICAgPyBwcm9wcy52YWx1ZS5hbW91bnRcbiAgICAgICAgICA6IGZvcm1hdHRlZEFtb3VudDtcblxuICAgICAgICAvLyBjaGFuZ2UgY3VycmVuY3kgY29kZVxuICAgICAgICBjb25zdCBmYWtlQ3VycmVuY3lFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogY3VycmVuY3lDb2RlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUN1cnJlbmN5RXZlbnQpO1xuXG4gICAgICAgIC8vIGNoYW5nZSBhbW91bnQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmIChwcm9wcy52YWx1ZS5hbW91bnQgIT09IG5leHRBbW91bnQpIHtcbiAgICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV4dEFtb3VudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhbW91bnRJbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgaW50bC5sb2NhbGUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG1vbmV5SW5wdXRJZCxcbiAgICAgIHByb3BzLm5hbWUsXG4gICAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFtvbkZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzLCBwcm9wcy5uYW1lLCBtb25leUlucHV0SWRdKTtcblxuICBjb25zdCBoYW5kbGVDdXJyZW5jeUJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyhmYWxzZSk7XG4gIH0sIFt0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSk7XG5cbiAgY29uc3QgaGFzTm9DdXJyZW5jaWVzID0gY3VycmVuY2llcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGhhc0ZvY3VzID0gY3VycmVuY3lIYXNGb2N1cyB8fCBhbW91bnRIYXNGb2N1cztcbiAgY29uc3QgY3VycmVuY3lTZWxlY3RTdHlsZXMgPSBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyh7XG4gICAgaGFzV2FybmluZzogcHJvcHMuaGFzV2FybmluZyxcbiAgICBoYXNFcnJvcjogcHJvcHMuaGFzRXJyb3IsXG4gICAgaXNDb25kZW5zZWQ6IHByb3BzLmlzQ29uZGVuc2VkLFxuICAgIGlzRGlzYWJsZWQ6IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSZWFkT25seTogcHJvcHMuaXNSZWFkT25seSxcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIGN1cnJlbmN5SGFzRm9jdXMsXG4gIH0pO1xuICBjb25zdCBvcHRpb25zID0gY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5Q29kZSkgPT4gKHtcbiAgICBsYWJlbDogY3VycmVuY3lDb2RlLFxuICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUsXG4gIH0pKTtcblxuICBjb25zdCBvcHRpb24gPSAoKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoXG4gICAgICAob3B0aW9uQ2FuZGlkYXRlKSA9PiBvcHRpb25DYW5kaWRhdGUudmFsdWUgPT09IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZVxuICAgICk7XG4gICAgaWYgKG1hdGNoZWRPcHRpb24pIHJldHVybiBtYXRjaGVkT3B0aW9uO1xuICAgIC8vIGVuc3VyZSBhbiBvcHRpb24gaXMgZm91bmQsIGV2ZW4gd2hlbiB0aGUgY3VycmVuY2llcyBkb24ndCBpbmNsdWRlXG4gICAgLy8gdGhlIG1vbmV5IHZhbHVlJ3MgY3VycmVuY3lDb2RlXG4gICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pKCk7XG5cbiAgY29uc3QgaXNIaWdoUHJlY2lzaW9uID1cbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KHByb3BzLnZhbHVlKSAmJlxuICAgIE1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uKHByb3BzLnZhbHVlLCBpbnRsLmxvY2FsZSk7XG5cbiAgY29uc3QgeyBvbkJsdXIgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJCbHVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBlbnN1cmVzIHRoYXQgYm90aCBmaWVsZHMgYXJlIG1hcmtlZCBhcyB0b3VjaGVkIHdoZW4gb25lIG9mIHRoZW1cbiAgICAgIC8vIGlzIGJsdXJyZWRcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAhY29udGFpbmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgICApIHtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25CbHVyLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgVG9vbHRpcFBvcnRhbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZW1haW5pbmdQcm9wcykgPT4gPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZH0gLz4sXG4gICAgW3Byb3BzLmlkXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENvbnN0cmFpbnRzLkhvcml6b250YWwgbWF4PXtob3Jpem9udGFsQ29uc3RyYWludH0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb25leS1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICBvbkJsdXI9e2hhbmRsZUNvbnRhaW5lckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHtoYXNOb0N1cnJlbmNpZXMgPyAoXG4gICAgICAgICAgPEN1cnJlbmN5TGFiZWxcbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSBhcyBzdHJpbmd9XG4gICAgICAgICAgICBpc0NvbmRlbnNlZD17cHJvcHMuaXNDb25kZW5zZWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNSZWFkT25seT17cHJvcHMuaXNSZWFkT25seX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uICYmIG9wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L0N1cnJlbmN5TGFiZWw+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaW5wdXRJZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIG5hbWU9e2dldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdmFsdWU9e29wdGlvbn1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkIHx8IHByb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1NlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgY29tcG9uZW50cz17XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBTaW5nbGVWYWx1ZTogKGlubmVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgIDxTaW5nbGVWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgSW5wdXQ6IChvd25Qcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuSW5wdXQgey4uLm93blByb3BzfSByZWFkT25seT17cHJvcHMuaXNSZWFkT25seX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIERyb3Bkb3duSW5kaWNhdG9yOiBwcm9wcy5pc0N1cnJlbmN5SW5wdXREaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IERyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICAgICAgICB9IGFzIFJlYWN0U2VsZWN0UHJvcHNbJ2NvbXBvbmVudHMnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIG1lbnVJc09wZW49e3Byb3BzLmlzUmVhZE9ubHkgPyBmYWxzZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICAgIHN0eWxlcz17Y3VycmVuY3lTZWxlY3RTdHlsZXMgYXMgUmVhY3RTZWxlY3RQcm9wc1snc3R5bGVzJ119XG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVDdXJyZW5jeUZvY3VzfVxuICAgICAgICAgICAgbWVudVBvcnRhbFRhcmdldD17cHJvcHMubWVudVBvcnRhbFRhcmdldH1cbiAgICAgICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbD17cHJvcHMubWVudVNob3VsZEJsb2NrU2Nyb2xsfVxuICAgICAgICAgICAgbWVudVBsYWNlbWVudD1cImF1dG9cIlxuICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVDdXJyZW5jeUJsdXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ3VycmVuY3lDaGFuZ2V9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImN1cnJlbmN5LWRyb3Bkb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e2Ftb3VudElucHV0UmVmfVxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgICAgICBuYW1lPXtnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVBbW91bnRGb2N1c31cbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZS5hbW91bnR9XG4gICAgICAgICAgICBjc3M9e1tcbiAgICAgICAgICAgICAgZ2V0QW1vdW50SW5wdXRTdHlsZXMoeyAuLi5wcm9wcywgaGFzRm9jdXMgfSksXG4gICAgICAgICAgICAgIC8vIGFjY291bnRzIGZvciBzaXplIG9mIGljb25cbiAgICAgICAgICAgICAgcHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmXG4gICAgICAgICAgICAgICAgaXNIaWdoUHJlY2lzaW9uICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzQwfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICBjdXJyZW5jeUhhc0ZvY3VzICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWR9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFtb3VudENoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQW1vdW50Qmx1cn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmlzQXV0b2ZvY3Vzc2VkfVxuICAgICAgICAgICAgey4uLmZpbHRlckRhdGFBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQsXG4gICAgICAgICAgICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvKiBBUklBICovXG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3Byb3BzWydhcmlhLWludmFsaWQnXX1cbiAgICAgICAgICAgIGFyaWEtZXJyb3JtZXNzYWdlPXtwcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiYgaXNIaWdoUHJlY2lzaW9uICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHshcHJvcHMuaXNEaXNhYmxlZCAmJiA8ZGl2IGlkPXtnZXRQb3J0YWxJZChwcm9wcy5pZCl9IC8+fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMoe1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgb2ZmPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wLWVuZFwiXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgbmVnYXRpdmUgbWFyZ2luIHRvIG1ha2UgdXAgZm9yIHRoZSBwYWRkaW5nIGluIHRoZSBUb29sdGlwIFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRvb2x0aXAgaXMgZmx1c2ggd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYCR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gLSR7ZGVzaWduVG9rZW5zLnNwYWNpbmcxMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAwYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmhpZ2hQcmVjaXNpb24pfVxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgICAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFBvcnRhbCxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */",
1051
+ styles: "position:relative;width:100%;label:MoneyInput;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpMUJrQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBDb21wb25lbnRUeXBlLFxuICB0eXBlIENoYW5nZUV2ZW50LFxuICB0eXBlIEZvY3VzRXZlbnQsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCwgeyB0eXBlIFRUb29sdGlwUHJvcHMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50IHwgRm9jdXNFdmVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyaXNoKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlKSkge1xuICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogeyB2YWx1ZTogVEN1cnJlbmN5Q29kZSB9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb24udmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICE9PSBjdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIGZyb20gYSBjdXJyZW5jeSB3aXRoIDMgZnJhY3Rpb24gZGlnaXRzIHRvXG4gICAgICAgIC8vIGEgY3VycmVuY3kgd2l0aCAyIGZyYWN0aW9uIGRpZ2l0cywgYW5kIHdoZW4gdGhlIGlucHV0IHZhbHVlIHdhc1xuICAgICAgICAvLyBcIjkuMDAwXCIgKDkpLCB0aGVuIGl0IHNob3VsZCBjaGFuZ2UgdG8gXCI5LjAwXCIgdG8gcmVmbGVjdCB0aGUgbmV3XG4gICAgICAgIC8vIGN1cnJlbmN5J3MgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVuY3kgd2FzIGEgaGlnaC1wcmVjaXNpb24gcHJpY2UsIHRoZW4gbm8gZGlnaXRzIHNob3VsZFxuICAgICAgICAvLyBiZSBsb3N0XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgICBwcm9wcy52YWx1ZS5hbW91bnQudHJpbSgpLFxuICAgICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgdXNlciBjb3VsZCBiZSBjaGFuZ2luZyB0aGUgY3VycmVuY3kgYmVmb3JlIGVudGVyaW5nIGFueSBhbW91bnQsXG4gICAgICAgIC8vIG9yIHdoaWxlIHRoZSBhbW91bnQgaXMgaW52YWxpZC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRvbid0IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBhbW91bnQuXG4gICAgICAgIGNvbnN0IG5leHRBbW91bnQgPSBpc05hTihOdW1iZXIoZm9ybWF0dGVkQW1vdW50KSlcbiAgICAgICAgICA/IHByb3BzLnZhbHVlLmFtb3VudFxuICAgICAgICAgIDogZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICAgIC8vIGNoYW5nZSBjdXJyZW5jeSBjb2RlXG4gICAgICAgIGNvbnN0IGZha2VDdXJyZW5jeUV2ZW50ID0ge1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlQ3VycmVuY3lFdmVudCk7XG5cbiAgICAgICAgLy8gY2hhbmdlIGFtb3VudCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKHByb3BzLnZhbHVlLmFtb3VudCAhPT0gbmV4dEFtb3VudCkge1xuICAgICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0QW1vdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFtb3VudElucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBpbnRsLmxvY2FsZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbW9uZXlJbnB1dElkLFxuICAgICAgcHJvcHMubmFtZSxcbiAgICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICAgIHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyh0cnVlKTtcbiAgfSwgW29uRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMsIHByb3BzLm5hbWUsIG1vbmV5SW5wdXRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Qmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKGZhbHNlKTtcbiAgfSwgW3RvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdKTtcblxuICBjb25zdCBoYXNOb0N1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgaGFzRm9jdXMgPSBjdXJyZW5jeUhhc0ZvY3VzIHx8IGFtb3VudEhhc0ZvY3VzO1xuICBjb25zdCBjdXJyZW5jeVNlbGVjdFN0eWxlcyA9IGNyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nOiBwcm9wcy5oYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yOiBwcm9wcy5oYXNFcnJvcixcbiAgICBpc0NvbmRlbnNlZDogcHJvcHMuaXNDb25kZW5zZWQsXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1JlYWRPbmx5OiBwcm9wcy5pc1JlYWRPbmx5LFxuICAgIG1lbnVQb3J0YWxaSW5kZXg6IG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgY3VycmVuY3lIYXNGb2N1cyxcbiAgfSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGxhYmVsOiBjdXJyZW5jeUNvZGUsXG4gICAgdmFsdWU6IGN1cnJlbmN5Q29kZSxcbiAgfSkpO1xuXG4gIGNvbnN0IG9wdGlvbiA9ICgoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb25DYW5kaWRhdGUpID0+IG9wdGlvbkNhbmRpZGF0ZS52YWx1ZSA9PT0gcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgLy8gZW5zdXJlIGFuIG9wdGlvbiBpcyBmb3VuZCwgZXZlbiB3aGVuIHRoZSBjdXJyZW5jaWVzIGRvbid0IGluY2x1ZGVcbiAgICAvLyB0aGUgbW9uZXkgdmFsdWUncyBjdXJyZW5jeUNvZGVcbiAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSkoKTtcblxuICBjb25zdCBpc0hpZ2hQcmVjaXNpb24gPVxuICAgICFNb25leUlucHV0LmlzRW1wdHkocHJvcHMudmFsdWUpICYmXG4gICAgTW9uZXlJbnB1dC5pc0hpZ2hQcmVjaXNpb24ocHJvcHMudmFsdWUsIGludGwubG9jYWxlKTtcblxuICBjb25zdCB7IG9uQmx1ciB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckJsdXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhhdCBib3RoIGZpZWxkcyBhcmUgbWFya2VkIGFzIHRvdWNoZWQgd2hlbiBvbmUgb2YgdGhlbVxuICAgICAgLy8gaXMgYmx1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFjb250YWluZXJSZWYuY3VycmVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKVxuICAgICAgKSB7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBvbkJsdXIoe1xuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQmx1ciwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IFRvb2x0aXBQb3J0YWwgPSB1c2VDYWxsYmFjayhcbiAgICAocmVtYWluaW5nUHJvcHM6IFRUb29sdGlwUHJvcHMgJiB7IGlkOiBzdHJpbmcgfSkgPT4gKFxuICAgICAgPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZCF9IC8+XG4gICAgKSxcbiAgICBbcHJvcHMuaWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29uc3RyYWludHMuSG9yaXpvbnRhbCBtYXg9e2hvcml6b250YWxDb25zdHJhaW50fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBgfVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbmV5LWlucHV0LWNvbnRhaW5lclwiXG4gICAgICAgIG9uQmx1cj17KGV2ZW50KSA9PlxuICAgICAgICAgIGhhbmRsZUNvbnRhaW5lckJsdXIoZXZlbnQgYXMgRm9jdXNFdmVudDxIVE1MRGl2RWxlbWVudD4pXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2hhc05vQ3VycmVuY2llcyA/IChcbiAgICAgICAgICA8Q3VycmVuY3lMYWJlbFxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlzQ29uZGVuc2VkPXtwcm9wcy5pc0NvbmRlbnNlZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1JlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb24gJiYgb3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvQ3VycmVuY3lMYWJlbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpbnB1dElkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgbmFtZT17Z2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17b3B0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQgfHwgcHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBjb21wb25lbnRzPXtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlOiAoaW5uZXJQcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNpbmdsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgICAgICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBJbnB1dDogKG93blByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5JbnB1dCB7Li4ub3duUHJvcHN9IHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRHJvcGRvd25JbmRpY2F0b3I6IHByb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3RTZWxlY3RQcm9wc1snY29tcG9uZW50cyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgbWVudUlzT3Blbj17cHJvcHMuaXNSZWFkT25seSA/IGZhbHNlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgc3R5bGVzPXtjdXJyZW5jeVNlbGVjdFN0eWxlcyBhcyBSZWFjdFNlbGVjdFByb3BzWydzdHlsZXMnXX1cbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUN1cnJlbmN5Rm9jdXN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtwcm9wcy5tZW51UG9ydGFsVGFyZ2V0fVxuICAgICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPXtwcm9wcy5tZW51U2hvdWxkQmxvY2tTY3JvbGx9XG4gICAgICAgICAgICBtZW51UGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUN1cnJlbmN5Qmx1cn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDdXJyZW5jeUNoYW5nZSBhcyBSZWFjdFNlbGVjdFByb3BzWydvbkNoYW5nZSddfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjdXJyZW5jeS1kcm9wZG93blwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXthbW91bnRJbnB1dFJlZn1cbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT17cHJvcHMuYXV0b0NvbXBsZXRlfVxuICAgICAgICAgICAgbmFtZT17Z2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlQW1vdW50Rm9jdXN9XG4gICAgICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWUuYW1vdW50fVxuICAgICAgICAgICAgY3NzPXtbXG4gICAgICAgICAgICAgIGdldEFtb3VudElucHV0U3R5bGVzKHsgLi4ucHJvcHMsIGhhc0ZvY3VzIH0pLFxuICAgICAgICAgICAgICAvLyBhY2NvdW50cyBmb3Igc2l6ZSBvZiBpY29uXG4gICAgICAgICAgICAgIHByb3BzLmhhc0hpZ2hQcmVjaXNpb25CYWRnZSAmJlxuICAgICAgICAgICAgICAgIGlzSGlnaFByZWNpc2lvbiAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmc0MH07XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgY3VycmVuY3lIYXNGb2N1cyAmJlxuICAgICAgICAgICAgICAgICFwcm9wcy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzUmVhZE9ubHkgJiZcbiAgICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5Gb2N1c2VkfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBbW91bnRDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUFtb3VudEJsdXJ9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5pc0F1dG9mb2N1c3NlZH1cbiAgICAgICAgICAgIHsuLi5maWx0ZXJEYXRhQXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgIGhvcml6b250YWxDb25zdHJhaW50LFxuICAgICAgICAgICAgICBtZW51UG9ydGFsWkluZGV4LFxuICAgICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLyogQVJJQSAqL1xuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXtwcm9wc1snYXJpYS1pbnZhbGlkJ119XG4gICAgICAgICAgICBhcmlhLWVycm9ybWVzc2FnZT17cHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ119XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7cHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmIGlzSGlnaFByZWNpc2lvbiAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7IXByb3BzLmlzRGlzYWJsZWQgJiYgPGRpdiBpZD17Z2V0UG9ydGFsSWQocHJvcHMuaWQpfSAvPn1cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIGdldEhpZ2hQcmVjaXNpb25XcmFwcGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgIG9mZj17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcC1lbmRcIlxuICAgICAgICAgICAgICAgICAgLy8gd2UgdXNlIG5lZ2F0aXZlIG1hcmdpbiB0byBtYWtlIHVwIGZvciB0aGUgcGFkZGluZyBpbiB0aGUgVG9vbHRpcCBXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0b29sdGlwIGlzIGZsdXNoIHdpdGggdGhlIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgc3R5bGVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IGAke2Rlc2lnblRva2Vucy5zcGFjaW5nMjB9IC0ke2Rlc2lnblRva2Vucy5zcGFjaW5nMTB9ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gMGAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5oaWdoUHJlY2lzaW9uKX1cbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICAgICAgVG9vbHRpcFdyYXBwZXJDb21wb25lbnQ6IFRvb2x0aXBQb3J0YWwgYXMgQ29tcG9uZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */",
1072
1052
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
1073
1053
  };
1074
1054
  var _ref2 = process.env.NODE_ENV === "production" ? {
@@ -1076,7 +1056,7 @@ var _ref2 = process.env.NODE_ENV === "production" ? {
1076
1056
  styles: "font-family:inherit;width:100%;position:relative;display:flex"
1077
1057
  } : {
1078
1058
  name: "1w49f4-MoneyInput",
1079
- styles: "font-family:inherit;width:100%;position:relative;display:flex;label:MoneyInput;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErd0JnQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChpc051bWJlcmlzaChldmVudC50YXJnZXQudmFsdWUpKSB7XG4gICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVuY3lDb2RlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSAhPT0gY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2hhbmdlcyBmcm9tIGEgY3VycmVuY3kgd2l0aCAzIGZyYWN0aW9uIGRpZ2l0cyB0b1xuICAgICAgICAvLyBhIGN1cnJlbmN5IHdpdGggMiBmcmFjdGlvbiBkaWdpdHMsIGFuZCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSB3YXNcbiAgICAgICAgLy8gXCI5LjAwMFwiICg5KSwgdGhlbiBpdCBzaG91bGQgY2hhbmdlIHRvIFwiOS4wMFwiIHRvIHJlZmxlY3QgdGhlIG5ld1xuICAgICAgICAvLyBjdXJyZW5jeSdzIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMuXG4gICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbmN5IHdhcyBhIGhpZ2gtcHJlY2lzaW9uIHByaWNlLCB0aGVuIG5vIGRpZ2l0cyBzaG91bGRcbiAgICAgICAgLy8gYmUgbG9zdFxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRBbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgICAgICAgcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKSxcbiAgICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgICBjdXJyZW5jeUNvZGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlIHVzZXIgY291bGQgYmUgY2hhbmdpbmcgdGhlIGN1cnJlbmN5IGJlZm9yZSBlbnRlcmluZyBhbnkgYW1vdW50LFxuICAgICAgICAvLyBvciB3aGlsZSB0aGUgYW1vdW50IGlzIGludmFsaWQuIEluIHRoZXNlIGNhc2VzLCB3ZSBkb24ndCBhdHRlbXB0IHRvXG4gICAgICAgIC8vIGZvcm1hdCB0aGUgYW1vdW50LlxuICAgICAgICBjb25zdCBuZXh0QW1vdW50ID0gaXNOYU4oTnVtYmVyKGZvcm1hdHRlZEFtb3VudCkpXG4gICAgICAgICAgPyBwcm9wcy52YWx1ZS5hbW91bnRcbiAgICAgICAgICA6IGZvcm1hdHRlZEFtb3VudDtcblxuICAgICAgICAvLyBjaGFuZ2UgY3VycmVuY3kgY29kZVxuICAgICAgICBjb25zdCBmYWtlQ3VycmVuY3lFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogY3VycmVuY3lDb2RlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUN1cnJlbmN5RXZlbnQpO1xuXG4gICAgICAgIC8vIGNoYW5nZSBhbW91bnQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmIChwcm9wcy52YWx1ZS5hbW91bnQgIT09IG5leHRBbW91bnQpIHtcbiAgICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV4dEFtb3VudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhbW91bnRJbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgaW50bC5sb2NhbGUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG1vbmV5SW5wdXRJZCxcbiAgICAgIHByb3BzLm5hbWUsXG4gICAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFtvbkZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzLCBwcm9wcy5uYW1lLCBtb25leUlucHV0SWRdKTtcblxuICBjb25zdCBoYW5kbGVDdXJyZW5jeUJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyhmYWxzZSk7XG4gIH0sIFt0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSk7XG5cbiAgY29uc3QgaGFzTm9DdXJyZW5jaWVzID0gY3VycmVuY2llcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGhhc0ZvY3VzID0gY3VycmVuY3lIYXNGb2N1cyB8fCBhbW91bnRIYXNGb2N1cztcbiAgY29uc3QgY3VycmVuY3lTZWxlY3RTdHlsZXMgPSBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyh7XG4gICAgaGFzV2FybmluZzogcHJvcHMuaGFzV2FybmluZyxcbiAgICBoYXNFcnJvcjogcHJvcHMuaGFzRXJyb3IsXG4gICAgaXNDb25kZW5zZWQ6IHByb3BzLmlzQ29uZGVuc2VkLFxuICAgIGlzRGlzYWJsZWQ6IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSZWFkT25seTogcHJvcHMuaXNSZWFkT25seSxcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIGN1cnJlbmN5SGFzRm9jdXMsXG4gIH0pO1xuICBjb25zdCBvcHRpb25zID0gY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5Q29kZSkgPT4gKHtcbiAgICBsYWJlbDogY3VycmVuY3lDb2RlLFxuICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUsXG4gIH0pKTtcblxuICBjb25zdCBvcHRpb24gPSAoKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoXG4gICAgICAob3B0aW9uQ2FuZGlkYXRlKSA9PiBvcHRpb25DYW5kaWRhdGUudmFsdWUgPT09IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZVxuICAgICk7XG4gICAgaWYgKG1hdGNoZWRPcHRpb24pIHJldHVybiBtYXRjaGVkT3B0aW9uO1xuICAgIC8vIGVuc3VyZSBhbiBvcHRpb24gaXMgZm91bmQsIGV2ZW4gd2hlbiB0aGUgY3VycmVuY2llcyBkb24ndCBpbmNsdWRlXG4gICAgLy8gdGhlIG1vbmV5IHZhbHVlJ3MgY3VycmVuY3lDb2RlXG4gICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pKCk7XG5cbiAgY29uc3QgaXNIaWdoUHJlY2lzaW9uID1cbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KHByb3BzLnZhbHVlKSAmJlxuICAgIE1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uKHByb3BzLnZhbHVlLCBpbnRsLmxvY2FsZSk7XG5cbiAgY29uc3QgeyBvbkJsdXIgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJCbHVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBlbnN1cmVzIHRoYXQgYm90aCBmaWVsZHMgYXJlIG1hcmtlZCBhcyB0b3VjaGVkIHdoZW4gb25lIG9mIHRoZW1cbiAgICAgIC8vIGlzIGJsdXJyZWRcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAhY29udGFpbmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgICApIHtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25CbHVyLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgVG9vbHRpcFBvcnRhbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZW1haW5pbmdQcm9wcykgPT4gPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZH0gLz4sXG4gICAgW3Byb3BzLmlkXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENvbnN0cmFpbnRzLkhvcml6b250YWwgbWF4PXtob3Jpem9udGFsQ29uc3RyYWludH0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb25leS1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICBvbkJsdXI9e2hhbmRsZUNvbnRhaW5lckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHtoYXNOb0N1cnJlbmNpZXMgPyAoXG4gICAgICAgICAgPEN1cnJlbmN5TGFiZWxcbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSBhcyBzdHJpbmd9XG4gICAgICAgICAgICBpc0NvbmRlbnNlZD17cHJvcHMuaXNDb25kZW5zZWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNSZWFkT25seT17cHJvcHMuaXNSZWFkT25seX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uICYmIG9wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L0N1cnJlbmN5TGFiZWw+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaW5wdXRJZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIG5hbWU9e2dldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdmFsdWU9e29wdGlvbn1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkIHx8IHByb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1NlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgY29tcG9uZW50cz17XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBTaW5nbGVWYWx1ZTogKGlubmVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgIDxTaW5nbGVWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgSW5wdXQ6IChvd25Qcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuSW5wdXQgey4uLm93blByb3BzfSByZWFkT25seT17cHJvcHMuaXNSZWFkT25seX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIERyb3Bkb3duSW5kaWNhdG9yOiBwcm9wcy5pc0N1cnJlbmN5SW5wdXREaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IERyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICAgICAgICB9IGFzIFJlYWN0U2VsZWN0UHJvcHNbJ2NvbXBvbmVudHMnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIG1lbnVJc09wZW49e3Byb3BzLmlzUmVhZE9ubHkgPyBmYWxzZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICAgIHN0eWxlcz17Y3VycmVuY3lTZWxlY3RTdHlsZXMgYXMgUmVhY3RTZWxlY3RQcm9wc1snc3R5bGVzJ119XG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVDdXJyZW5jeUZvY3VzfVxuICAgICAgICAgICAgbWVudVBvcnRhbFRhcmdldD17cHJvcHMubWVudVBvcnRhbFRhcmdldH1cbiAgICAgICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbD17cHJvcHMubWVudVNob3VsZEJsb2NrU2Nyb2xsfVxuICAgICAgICAgICAgbWVudVBsYWNlbWVudD1cImF1dG9cIlxuICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVDdXJyZW5jeUJsdXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ3VycmVuY3lDaGFuZ2V9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImN1cnJlbmN5LWRyb3Bkb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e2Ftb3VudElucHV0UmVmfVxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgICAgICBuYW1lPXtnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVBbW91bnRGb2N1c31cbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZS5hbW91bnR9XG4gICAgICAgICAgICBjc3M9e1tcbiAgICAgICAgICAgICAgZ2V0QW1vdW50SW5wdXRTdHlsZXMoeyAuLi5wcm9wcywgaGFzRm9jdXMgfSksXG4gICAgICAgICAgICAgIC8vIGFjY291bnRzIGZvciBzaXplIG9mIGljb25cbiAgICAgICAgICAgICAgcHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmXG4gICAgICAgICAgICAgICAgaXNIaWdoUHJlY2lzaW9uICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzQwfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICBjdXJyZW5jeUhhc0ZvY3VzICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWR9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFtb3VudENoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQW1vdW50Qmx1cn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmlzQXV0b2ZvY3Vzc2VkfVxuICAgICAgICAgICAgey4uLmZpbHRlckRhdGFBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQsXG4gICAgICAgICAgICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvKiBBUklBICovXG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3Byb3BzWydhcmlhLWludmFsaWQnXX1cbiAgICAgICAgICAgIGFyaWEtZXJyb3JtZXNzYWdlPXtwcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiYgaXNIaWdoUHJlY2lzaW9uICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHshcHJvcHMuaXNEaXNhYmxlZCAmJiA8ZGl2IGlkPXtnZXRQb3J0YWxJZChwcm9wcy5pZCl9IC8+fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMoe1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgb2ZmPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wLWVuZFwiXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgbmVnYXRpdmUgbWFyZ2luIHRvIG1ha2UgdXAgZm9yIHRoZSBwYWRkaW5nIGluIHRoZSBUb29sdGlwIFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRvb2x0aXAgaXMgZmx1c2ggd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYCR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gLSR7ZGVzaWduVG9rZW5zLnNwYWNpbmcxMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAwYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmhpZ2hQcmVjaXNpb24pfVxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgICAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFBvcnRhbCxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */",
1059
+ styles: "font-family:inherit;width:100%;position:relative;display:flex;label:MoneyInput;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3eEJnQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBDb21wb25lbnRUeXBlLFxuICB0eXBlIENoYW5nZUV2ZW50LFxuICB0eXBlIEZvY3VzRXZlbnQsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCwgeyB0eXBlIFRUb29sdGlwUHJvcHMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50IHwgRm9jdXNFdmVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyaXNoKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlKSkge1xuICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogeyB2YWx1ZTogVEN1cnJlbmN5Q29kZSB9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb24udmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICE9PSBjdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIGZyb20gYSBjdXJyZW5jeSB3aXRoIDMgZnJhY3Rpb24gZGlnaXRzIHRvXG4gICAgICAgIC8vIGEgY3VycmVuY3kgd2l0aCAyIGZyYWN0aW9uIGRpZ2l0cywgYW5kIHdoZW4gdGhlIGlucHV0IHZhbHVlIHdhc1xuICAgICAgICAvLyBcIjkuMDAwXCIgKDkpLCB0aGVuIGl0IHNob3VsZCBjaGFuZ2UgdG8gXCI5LjAwXCIgdG8gcmVmbGVjdCB0aGUgbmV3XG4gICAgICAgIC8vIGN1cnJlbmN5J3MgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVuY3kgd2FzIGEgaGlnaC1wcmVjaXNpb24gcHJpY2UsIHRoZW4gbm8gZGlnaXRzIHNob3VsZFxuICAgICAgICAvLyBiZSBsb3N0XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgICBwcm9wcy52YWx1ZS5hbW91bnQudHJpbSgpLFxuICAgICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgdXNlciBjb3VsZCBiZSBjaGFuZ2luZyB0aGUgY3VycmVuY3kgYmVmb3JlIGVudGVyaW5nIGFueSBhbW91bnQsXG4gICAgICAgIC8vIG9yIHdoaWxlIHRoZSBhbW91bnQgaXMgaW52YWxpZC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRvbid0IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBhbW91bnQuXG4gICAgICAgIGNvbnN0IG5leHRBbW91bnQgPSBpc05hTihOdW1iZXIoZm9ybWF0dGVkQW1vdW50KSlcbiAgICAgICAgICA/IHByb3BzLnZhbHVlLmFtb3VudFxuICAgICAgICAgIDogZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICAgIC8vIGNoYW5nZSBjdXJyZW5jeSBjb2RlXG4gICAgICAgIGNvbnN0IGZha2VDdXJyZW5jeUV2ZW50ID0ge1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlQ3VycmVuY3lFdmVudCk7XG5cbiAgICAgICAgLy8gY2hhbmdlIGFtb3VudCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKHByb3BzLnZhbHVlLmFtb3VudCAhPT0gbmV4dEFtb3VudCkge1xuICAgICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0QW1vdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFtb3VudElucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBpbnRsLmxvY2FsZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbW9uZXlJbnB1dElkLFxuICAgICAgcHJvcHMubmFtZSxcbiAgICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICAgIHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyh0cnVlKTtcbiAgfSwgW29uRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMsIHByb3BzLm5hbWUsIG1vbmV5SW5wdXRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Qmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKGZhbHNlKTtcbiAgfSwgW3RvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdKTtcblxuICBjb25zdCBoYXNOb0N1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgaGFzRm9jdXMgPSBjdXJyZW5jeUhhc0ZvY3VzIHx8IGFtb3VudEhhc0ZvY3VzO1xuICBjb25zdCBjdXJyZW5jeVNlbGVjdFN0eWxlcyA9IGNyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nOiBwcm9wcy5oYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yOiBwcm9wcy5oYXNFcnJvcixcbiAgICBpc0NvbmRlbnNlZDogcHJvcHMuaXNDb25kZW5zZWQsXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1JlYWRPbmx5OiBwcm9wcy5pc1JlYWRPbmx5LFxuICAgIG1lbnVQb3J0YWxaSW5kZXg6IG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgY3VycmVuY3lIYXNGb2N1cyxcbiAgfSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGxhYmVsOiBjdXJyZW5jeUNvZGUsXG4gICAgdmFsdWU6IGN1cnJlbmN5Q29kZSxcbiAgfSkpO1xuXG4gIGNvbnN0IG9wdGlvbiA9ICgoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb25DYW5kaWRhdGUpID0+IG9wdGlvbkNhbmRpZGF0ZS52YWx1ZSA9PT0gcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgLy8gZW5zdXJlIGFuIG9wdGlvbiBpcyBmb3VuZCwgZXZlbiB3aGVuIHRoZSBjdXJyZW5jaWVzIGRvbid0IGluY2x1ZGVcbiAgICAvLyB0aGUgbW9uZXkgdmFsdWUncyBjdXJyZW5jeUNvZGVcbiAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSkoKTtcblxuICBjb25zdCBpc0hpZ2hQcmVjaXNpb24gPVxuICAgICFNb25leUlucHV0LmlzRW1wdHkocHJvcHMudmFsdWUpICYmXG4gICAgTW9uZXlJbnB1dC5pc0hpZ2hQcmVjaXNpb24ocHJvcHMudmFsdWUsIGludGwubG9jYWxlKTtcblxuICBjb25zdCB7IG9uQmx1ciB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckJsdXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhhdCBib3RoIGZpZWxkcyBhcmUgbWFya2VkIGFzIHRvdWNoZWQgd2hlbiBvbmUgb2YgdGhlbVxuICAgICAgLy8gaXMgYmx1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFjb250YWluZXJSZWYuY3VycmVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKVxuICAgICAgKSB7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBvbkJsdXIoe1xuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQmx1ciwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IFRvb2x0aXBQb3J0YWwgPSB1c2VDYWxsYmFjayhcbiAgICAocmVtYWluaW5nUHJvcHM6IFRUb29sdGlwUHJvcHMgJiB7IGlkOiBzdHJpbmcgfSkgPT4gKFxuICAgICAgPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZCF9IC8+XG4gICAgKSxcbiAgICBbcHJvcHMuaWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29uc3RyYWludHMuSG9yaXpvbnRhbCBtYXg9e2hvcml6b250YWxDb25zdHJhaW50fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBgfVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbmV5LWlucHV0LWNvbnRhaW5lclwiXG4gICAgICAgIG9uQmx1cj17KGV2ZW50KSA9PlxuICAgICAgICAgIGhhbmRsZUNvbnRhaW5lckJsdXIoZXZlbnQgYXMgRm9jdXNFdmVudDxIVE1MRGl2RWxlbWVudD4pXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2hhc05vQ3VycmVuY2llcyA/IChcbiAgICAgICAgICA8Q3VycmVuY3lMYWJlbFxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlzQ29uZGVuc2VkPXtwcm9wcy5pc0NvbmRlbnNlZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1JlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb24gJiYgb3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvQ3VycmVuY3lMYWJlbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpbnB1dElkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgbmFtZT17Z2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17b3B0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQgfHwgcHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBjb21wb25lbnRzPXtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlOiAoaW5uZXJQcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNpbmdsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgICAgICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBJbnB1dDogKG93blByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5JbnB1dCB7Li4ub3duUHJvcHN9IHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRHJvcGRvd25JbmRpY2F0b3I6IHByb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3RTZWxlY3RQcm9wc1snY29tcG9uZW50cyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgbWVudUlzT3Blbj17cHJvcHMuaXNSZWFkT25seSA/IGZhbHNlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgc3R5bGVzPXtjdXJyZW5jeVNlbGVjdFN0eWxlcyBhcyBSZWFjdFNlbGVjdFByb3BzWydzdHlsZXMnXX1cbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUN1cnJlbmN5Rm9jdXN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtwcm9wcy5tZW51UG9ydGFsVGFyZ2V0fVxuICAgICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPXtwcm9wcy5tZW51U2hvdWxkQmxvY2tTY3JvbGx9XG4gICAgICAgICAgICBtZW51UGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUN1cnJlbmN5Qmx1cn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDdXJyZW5jeUNoYW5nZSBhcyBSZWFjdFNlbGVjdFByb3BzWydvbkNoYW5nZSddfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjdXJyZW5jeS1kcm9wZG93blwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXthbW91bnRJbnB1dFJlZn1cbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT17cHJvcHMuYXV0b0NvbXBsZXRlfVxuICAgICAgICAgICAgbmFtZT17Z2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlQW1vdW50Rm9jdXN9XG4gICAgICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWUuYW1vdW50fVxuICAgICAgICAgICAgY3NzPXtbXG4gICAgICAgICAgICAgIGdldEFtb3VudElucHV0U3R5bGVzKHsgLi4ucHJvcHMsIGhhc0ZvY3VzIH0pLFxuICAgICAgICAgICAgICAvLyBhY2NvdW50cyBmb3Igc2l6ZSBvZiBpY29uXG4gICAgICAgICAgICAgIHByb3BzLmhhc0hpZ2hQcmVjaXNpb25CYWRnZSAmJlxuICAgICAgICAgICAgICAgIGlzSGlnaFByZWNpc2lvbiAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmc0MH07XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgY3VycmVuY3lIYXNGb2N1cyAmJlxuICAgICAgICAgICAgICAgICFwcm9wcy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzUmVhZE9ubHkgJiZcbiAgICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5Gb2N1c2VkfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBbW91bnRDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUFtb3VudEJsdXJ9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5pc0F1dG9mb2N1c3NlZH1cbiAgICAgICAgICAgIHsuLi5maWx0ZXJEYXRhQXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgIGhvcml6b250YWxDb25zdHJhaW50LFxuICAgICAgICAgICAgICBtZW51UG9ydGFsWkluZGV4LFxuICAgICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLyogQVJJQSAqL1xuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXtwcm9wc1snYXJpYS1pbnZhbGlkJ119XG4gICAgICAgICAgICBhcmlhLWVycm9ybWVzc2FnZT17cHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ119XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7cHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmIGlzSGlnaFByZWNpc2lvbiAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7IXByb3BzLmlzRGlzYWJsZWQgJiYgPGRpdiBpZD17Z2V0UG9ydGFsSWQocHJvcHMuaWQpfSAvPn1cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIGdldEhpZ2hQcmVjaXNpb25XcmFwcGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgIG9mZj17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcC1lbmRcIlxuICAgICAgICAgICAgICAgICAgLy8gd2UgdXNlIG5lZ2F0aXZlIG1hcmdpbiB0byBtYWtlIHVwIGZvciB0aGUgcGFkZGluZyBpbiB0aGUgVG9vbHRpcCBXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0b29sdGlwIGlzIGZsdXNoIHdpdGggdGhlIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgc3R5bGVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IGAke2Rlc2lnblRva2Vucy5zcGFjaW5nMjB9IC0ke2Rlc2lnblRva2Vucy5zcGFjaW5nMTB9ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gMGAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5oaWdoUHJlY2lzaW9uKX1cbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICAgICAgVG9vbHRpcFdyYXBwZXJDb21wb25lbnQ6IFRvb2x0aXBQb3J0YWwgYXMgQ29tcG9uZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */",
1080
1060
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
1081
1061
  };
1082
1062
  const MoneyInput = _ref5 => {
@@ -1144,13 +1124,13 @@ const MoneyInput = _ref5 => {
1144
1124
  }
1145
1125
  }, [intl.locale, onChange, moneyInputId, props.name, props.value.amount, props.value.currencyCode, toggleAmountHasFocus]);
1146
1126
  const handleAmountChange = react$1.useCallback(event => {
1147
- if (utils.isNumberish(event.target.value)) {
1127
+ if (utils.isNumberish(event.target?.value)) {
1148
1128
  onChange?.({
1149
1129
  persist: () => {},
1150
1130
  target: {
1151
1131
  id: MoneyInput.getAmountInputId(moneyInputId),
1152
1132
  name: getAmountInputName(props.name),
1153
- value: event.target.value
1133
+ value: event.target?.value
1154
1134
  }
1155
1135
  });
1156
1136
  }
@@ -1263,7 +1243,7 @@ const MoneyInput = _ref5 => {
1263
1243
  ref: containerRef,
1264
1244
  css: _ref2,
1265
1245
  "data-testid": "money-input-container",
1266
- onBlur: handleContainerBlur,
1246
+ onBlur: event => handleContainerBlur(event),
1267
1247
  children: [hasNoCurrencies ? jsxRuntime.jsx(CurrencyLabel, {
1268
1248
  id: MoneyInput.getAmountInputId(moneyInputId),
1269
1249
  isCondensed: props.isCondensed,
@@ -1310,7 +1290,7 @@ const MoneyInput = _ref5 => {
1310
1290
  hasFocus
1311
1291
  })),
1312
1292
  // accounts for size of icon
1313
- props.hasHighPrecisionBadge && isHighPrecision && /*#__PURE__*/react.css("padding-right:", designSystem.designTokens.spacing40, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:MoneyInput;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3MUJtQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChpc051bWJlcmlzaChldmVudC50YXJnZXQudmFsdWUpKSB7XG4gICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVuY3lDb2RlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSAhPT0gY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2hhbmdlcyBmcm9tIGEgY3VycmVuY3kgd2l0aCAzIGZyYWN0aW9uIGRpZ2l0cyB0b1xuICAgICAgICAvLyBhIGN1cnJlbmN5IHdpdGggMiBmcmFjdGlvbiBkaWdpdHMsIGFuZCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSB3YXNcbiAgICAgICAgLy8gXCI5LjAwMFwiICg5KSwgdGhlbiBpdCBzaG91bGQgY2hhbmdlIHRvIFwiOS4wMFwiIHRvIHJlZmxlY3QgdGhlIG5ld1xuICAgICAgICAvLyBjdXJyZW5jeSdzIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMuXG4gICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbmN5IHdhcyBhIGhpZ2gtcHJlY2lzaW9uIHByaWNlLCB0aGVuIG5vIGRpZ2l0cyBzaG91bGRcbiAgICAgICAgLy8gYmUgbG9zdFxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRBbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgICAgICAgcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKSxcbiAgICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgICBjdXJyZW5jeUNvZGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlIHVzZXIgY291bGQgYmUgY2hhbmdpbmcgdGhlIGN1cnJlbmN5IGJlZm9yZSBlbnRlcmluZyBhbnkgYW1vdW50LFxuICAgICAgICAvLyBvciB3aGlsZSB0aGUgYW1vdW50IGlzIGludmFsaWQuIEluIHRoZXNlIGNhc2VzLCB3ZSBkb24ndCBhdHRlbXB0IHRvXG4gICAgICAgIC8vIGZvcm1hdCB0aGUgYW1vdW50LlxuICAgICAgICBjb25zdCBuZXh0QW1vdW50ID0gaXNOYU4oTnVtYmVyKGZvcm1hdHRlZEFtb3VudCkpXG4gICAgICAgICAgPyBwcm9wcy52YWx1ZS5hbW91bnRcbiAgICAgICAgICA6IGZvcm1hdHRlZEFtb3VudDtcblxuICAgICAgICAvLyBjaGFuZ2UgY3VycmVuY3kgY29kZVxuICAgICAgICBjb25zdCBmYWtlQ3VycmVuY3lFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogY3VycmVuY3lDb2RlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUN1cnJlbmN5RXZlbnQpO1xuXG4gICAgICAgIC8vIGNoYW5nZSBhbW91bnQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmIChwcm9wcy52YWx1ZS5hbW91bnQgIT09IG5leHRBbW91bnQpIHtcbiAgICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV4dEFtb3VudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhbW91bnRJbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgaW50bC5sb2NhbGUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG1vbmV5SW5wdXRJZCxcbiAgICAgIHByb3BzLm5hbWUsXG4gICAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFtvbkZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzLCBwcm9wcy5uYW1lLCBtb25leUlucHV0SWRdKTtcblxuICBjb25zdCBoYW5kbGVDdXJyZW5jeUJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyhmYWxzZSk7XG4gIH0sIFt0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSk7XG5cbiAgY29uc3QgaGFzTm9DdXJyZW5jaWVzID0gY3VycmVuY2llcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGhhc0ZvY3VzID0gY3VycmVuY3lIYXNGb2N1cyB8fCBhbW91bnRIYXNGb2N1cztcbiAgY29uc3QgY3VycmVuY3lTZWxlY3RTdHlsZXMgPSBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyh7XG4gICAgaGFzV2FybmluZzogcHJvcHMuaGFzV2FybmluZyxcbiAgICBoYXNFcnJvcjogcHJvcHMuaGFzRXJyb3IsXG4gICAgaXNDb25kZW5zZWQ6IHByb3BzLmlzQ29uZGVuc2VkLFxuICAgIGlzRGlzYWJsZWQ6IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSZWFkT25seTogcHJvcHMuaXNSZWFkT25seSxcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIGN1cnJlbmN5SGFzRm9jdXMsXG4gIH0pO1xuICBjb25zdCBvcHRpb25zID0gY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5Q29kZSkgPT4gKHtcbiAgICBsYWJlbDogY3VycmVuY3lDb2RlLFxuICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUsXG4gIH0pKTtcblxuICBjb25zdCBvcHRpb24gPSAoKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoXG4gICAgICAob3B0aW9uQ2FuZGlkYXRlKSA9PiBvcHRpb25DYW5kaWRhdGUudmFsdWUgPT09IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZVxuICAgICk7XG4gICAgaWYgKG1hdGNoZWRPcHRpb24pIHJldHVybiBtYXRjaGVkT3B0aW9uO1xuICAgIC8vIGVuc3VyZSBhbiBvcHRpb24gaXMgZm91bmQsIGV2ZW4gd2hlbiB0aGUgY3VycmVuY2llcyBkb24ndCBpbmNsdWRlXG4gICAgLy8gdGhlIG1vbmV5IHZhbHVlJ3MgY3VycmVuY3lDb2RlXG4gICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pKCk7XG5cbiAgY29uc3QgaXNIaWdoUHJlY2lzaW9uID1cbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KHByb3BzLnZhbHVlKSAmJlxuICAgIE1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uKHByb3BzLnZhbHVlLCBpbnRsLmxvY2FsZSk7XG5cbiAgY29uc3QgeyBvbkJsdXIgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJCbHVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBlbnN1cmVzIHRoYXQgYm90aCBmaWVsZHMgYXJlIG1hcmtlZCBhcyB0b3VjaGVkIHdoZW4gb25lIG9mIHRoZW1cbiAgICAgIC8vIGlzIGJsdXJyZWRcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAhY29udGFpbmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgICApIHtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25CbHVyLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgVG9vbHRpcFBvcnRhbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZW1haW5pbmdQcm9wcykgPT4gPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZH0gLz4sXG4gICAgW3Byb3BzLmlkXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENvbnN0cmFpbnRzLkhvcml6b250YWwgbWF4PXtob3Jpem9udGFsQ29uc3RyYWludH0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb25leS1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICBvbkJsdXI9e2hhbmRsZUNvbnRhaW5lckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHtoYXNOb0N1cnJlbmNpZXMgPyAoXG4gICAgICAgICAgPEN1cnJlbmN5TGFiZWxcbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSBhcyBzdHJpbmd9XG4gICAgICAgICAgICBpc0NvbmRlbnNlZD17cHJvcHMuaXNDb25kZW5zZWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNSZWFkT25seT17cHJvcHMuaXNSZWFkT25seX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uICYmIG9wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L0N1cnJlbmN5TGFiZWw+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaW5wdXRJZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIG5hbWU9e2dldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdmFsdWU9e29wdGlvbn1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkIHx8IHByb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1NlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgY29tcG9uZW50cz17XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBTaW5nbGVWYWx1ZTogKGlubmVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgIDxTaW5nbGVWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgSW5wdXQ6IChvd25Qcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuSW5wdXQgey4uLm93blByb3BzfSByZWFkT25seT17cHJvcHMuaXNSZWFkT25seX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIERyb3Bkb3duSW5kaWNhdG9yOiBwcm9wcy5pc0N1cnJlbmN5SW5wdXREaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IERyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICAgICAgICB9IGFzIFJlYWN0U2VsZWN0UHJvcHNbJ2NvbXBvbmVudHMnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIG1lbnVJc09wZW49e3Byb3BzLmlzUmVhZE9ubHkgPyBmYWxzZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICAgIHN0eWxlcz17Y3VycmVuY3lTZWxlY3RTdHlsZXMgYXMgUmVhY3RTZWxlY3RQcm9wc1snc3R5bGVzJ119XG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVDdXJyZW5jeUZvY3VzfVxuICAgICAgICAgICAgbWVudVBvcnRhbFRhcmdldD17cHJvcHMubWVudVBvcnRhbFRhcmdldH1cbiAgICAgICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbD17cHJvcHMubWVudVNob3VsZEJsb2NrU2Nyb2xsfVxuICAgICAgICAgICAgbWVudVBsYWNlbWVudD1cImF1dG9cIlxuICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVDdXJyZW5jeUJsdXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ3VycmVuY3lDaGFuZ2V9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImN1cnJlbmN5LWRyb3Bkb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e2Ftb3VudElucHV0UmVmfVxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgICAgICBuYW1lPXtnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVBbW91bnRGb2N1c31cbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZS5hbW91bnR9XG4gICAgICAgICAgICBjc3M9e1tcbiAgICAgICAgICAgICAgZ2V0QW1vdW50SW5wdXRTdHlsZXMoeyAuLi5wcm9wcywgaGFzRm9jdXMgfSksXG4gICAgICAgICAgICAgIC8vIGFjY291bnRzIGZvciBzaXplIG9mIGljb25cbiAgICAgICAgICAgICAgcHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmXG4gICAgICAgICAgICAgICAgaXNIaWdoUHJlY2lzaW9uICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzQwfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICBjdXJyZW5jeUhhc0ZvY3VzICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWR9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFtb3VudENoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQW1vdW50Qmx1cn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmlzQXV0b2ZvY3Vzc2VkfVxuICAgICAgICAgICAgey4uLmZpbHRlckRhdGFBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQsXG4gICAgICAgICAgICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvKiBBUklBICovXG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3Byb3BzWydhcmlhLWludmFsaWQnXX1cbiAgICAgICAgICAgIGFyaWEtZXJyb3JtZXNzYWdlPXtwcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiYgaXNIaWdoUHJlY2lzaW9uICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHshcHJvcHMuaXNEaXNhYmxlZCAmJiA8ZGl2IGlkPXtnZXRQb3J0YWxJZChwcm9wcy5pZCl9IC8+fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMoe1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgb2ZmPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wLWVuZFwiXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgbmVnYXRpdmUgbWFyZ2luIHRvIG1ha2UgdXAgZm9yIHRoZSBwYWRkaW5nIGluIHRoZSBUb29sdGlwIFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRvb2x0aXAgaXMgZmx1c2ggd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYCR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gLSR7ZGVzaWduVG9rZW5zLnNwYWNpbmcxMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAwYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmhpZ2hQcmVjaXNpb24pfVxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgICAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFBvcnRhbCxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */"), currencyHasFocus && !props.isDisabled && !props.isReadOnly && /*#__PURE__*/react.css("border-left-color:", designSystem.designTokens.borderColorForInputWhenFocused, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:MoneyInput;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4MUJtQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChpc051bWJlcmlzaChldmVudC50YXJnZXQudmFsdWUpKSB7XG4gICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VycmVuY3lDb2RlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSAhPT0gY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2hhbmdlcyBmcm9tIGEgY3VycmVuY3kgd2l0aCAzIGZyYWN0aW9uIGRpZ2l0cyB0b1xuICAgICAgICAvLyBhIGN1cnJlbmN5IHdpdGggMiBmcmFjdGlvbiBkaWdpdHMsIGFuZCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSB3YXNcbiAgICAgICAgLy8gXCI5LjAwMFwiICg5KSwgdGhlbiBpdCBzaG91bGQgY2hhbmdlIHRvIFwiOS4wMFwiIHRvIHJlZmxlY3QgdGhlIG5ld1xuICAgICAgICAvLyBjdXJyZW5jeSdzIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMuXG4gICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbmN5IHdhcyBhIGhpZ2gtcHJlY2lzaW9uIHByaWNlLCB0aGVuIG5vIGRpZ2l0cyBzaG91bGRcbiAgICAgICAgLy8gYmUgbG9zdFxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRBbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgICAgICAgcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKSxcbiAgICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgICBjdXJyZW5jeUNvZGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlIHVzZXIgY291bGQgYmUgY2hhbmdpbmcgdGhlIGN1cnJlbmN5IGJlZm9yZSBlbnRlcmluZyBhbnkgYW1vdW50LFxuICAgICAgICAvLyBvciB3aGlsZSB0aGUgYW1vdW50IGlzIGludmFsaWQuIEluIHRoZXNlIGNhc2VzLCB3ZSBkb24ndCBhdHRlbXB0IHRvXG4gICAgICAgIC8vIGZvcm1hdCB0aGUgYW1vdW50LlxuICAgICAgICBjb25zdCBuZXh0QW1vdW50ID0gaXNOYU4oTnVtYmVyKGZvcm1hdHRlZEFtb3VudCkpXG4gICAgICAgICAgPyBwcm9wcy52YWx1ZS5hbW91bnRcbiAgICAgICAgICA6IGZvcm1hdHRlZEFtb3VudDtcblxuICAgICAgICAvLyBjaGFuZ2UgY3VycmVuY3kgY29kZVxuICAgICAgICBjb25zdCBmYWtlQ3VycmVuY3lFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogY3VycmVuY3lDb2RlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUN1cnJlbmN5RXZlbnQpO1xuXG4gICAgICAgIC8vIGNoYW5nZSBhbW91bnQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmIChwcm9wcy52YWx1ZS5hbW91bnQgIT09IG5leHRBbW91bnQpIHtcbiAgICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogbmV4dEFtb3VudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhbW91bnRJbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgaW50bC5sb2NhbGUsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG1vbmV5SW5wdXRJZCxcbiAgICAgIHByb3BzLm5hbWUsXG4gICAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFtvbkZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzLCBwcm9wcy5uYW1lLCBtb25leUlucHV0SWRdKTtcblxuICBjb25zdCBoYW5kbGVDdXJyZW5jeUJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyhmYWxzZSk7XG4gIH0sIFt0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSk7XG5cbiAgY29uc3QgaGFzTm9DdXJyZW5jaWVzID0gY3VycmVuY2llcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGhhc0ZvY3VzID0gY3VycmVuY3lIYXNGb2N1cyB8fCBhbW91bnRIYXNGb2N1cztcbiAgY29uc3QgY3VycmVuY3lTZWxlY3RTdHlsZXMgPSBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyh7XG4gICAgaGFzV2FybmluZzogcHJvcHMuaGFzV2FybmluZyxcbiAgICBoYXNFcnJvcjogcHJvcHMuaGFzRXJyb3IsXG4gICAgaXNDb25kZW5zZWQ6IHByb3BzLmlzQ29uZGVuc2VkLFxuICAgIGlzRGlzYWJsZWQ6IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgaXNSZWFkT25seTogcHJvcHMuaXNSZWFkT25seSxcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIGN1cnJlbmN5SGFzRm9jdXMsXG4gIH0pO1xuICBjb25zdCBvcHRpb25zID0gY3VycmVuY2llcy5tYXAoKGN1cnJlbmN5Q29kZSkgPT4gKHtcbiAgICBsYWJlbDogY3VycmVuY3lDb2RlLFxuICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUsXG4gIH0pKTtcblxuICBjb25zdCBvcHRpb24gPSAoKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoXG4gICAgICAob3B0aW9uQ2FuZGlkYXRlKSA9PiBvcHRpb25DYW5kaWRhdGUudmFsdWUgPT09IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZVxuICAgICk7XG4gICAgaWYgKG1hdGNoZWRPcHRpb24pIHJldHVybiBtYXRjaGVkT3B0aW9uO1xuICAgIC8vIGVuc3VyZSBhbiBvcHRpb24gaXMgZm91bmQsIGV2ZW4gd2hlbiB0aGUgY3VycmVuY2llcyBkb24ndCBpbmNsdWRlXG4gICAgLy8gdGhlIG1vbmV5IHZhbHVlJ3MgY3VycmVuY3lDb2RlXG4gICAgaWYgKHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICAgIH07XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pKCk7XG5cbiAgY29uc3QgaXNIaWdoUHJlY2lzaW9uID1cbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KHByb3BzLnZhbHVlKSAmJlxuICAgIE1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uKHByb3BzLnZhbHVlLCBpbnRsLmxvY2FsZSk7XG5cbiAgY29uc3QgeyBvbkJsdXIgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJCbHVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICAvLyBlbnN1cmVzIHRoYXQgYm90aCBmaWVsZHMgYXJlIG1hcmtlZCBhcyB0b3VjaGVkIHdoZW4gb25lIG9mIHRoZW1cbiAgICAgIC8vIGlzIGJsdXJyZWRcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIG9uQmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAhY29udGFpbmVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgICApIHtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25CbHVyLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgVG9vbHRpcFBvcnRhbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZW1haW5pbmdQcm9wcykgPT4gPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZH0gLz4sXG4gICAgW3Byb3BzLmlkXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENvbnN0cmFpbnRzLkhvcml6b250YWwgbWF4PXtob3Jpem9udGFsQ29uc3RyYWludH0+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb25leS1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICBvbkJsdXI9e2hhbmRsZUNvbnRhaW5lckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHtoYXNOb0N1cnJlbmNpZXMgPyAoXG4gICAgICAgICAgPEN1cnJlbmN5TGFiZWxcbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSBhcyBzdHJpbmd9XG4gICAgICAgICAgICBpc0NvbmRlbnNlZD17cHJvcHMuaXNDb25kZW5zZWR9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNSZWFkT25seT17cHJvcHMuaXNSZWFkT25seX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uICYmIG9wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L0N1cnJlbmN5TGFiZWw+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaW5wdXRJZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIG5hbWU9e2dldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdmFsdWU9e29wdGlvbn1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkIHx8IHByb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1NlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgY29tcG9uZW50cz17XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBTaW5nbGVWYWx1ZTogKGlubmVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgIDxTaW5nbGVWYWx1ZVxuICAgICAgICAgICAgICAgICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICAgICAgICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgSW5wdXQ6IChvd25Qcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuSW5wdXQgey4uLm93blByb3BzfSByZWFkT25seT17cHJvcHMuaXNSZWFkT25seX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIERyb3Bkb3duSW5kaWNhdG9yOiBwcm9wcy5pc0N1cnJlbmN5SW5wdXREaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IERyb3Bkb3duSW5kaWNhdG9yLFxuICAgICAgICAgICAgICB9IGFzIFJlYWN0U2VsZWN0UHJvcHNbJ2NvbXBvbmVudHMnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIG1lbnVJc09wZW49e3Byb3BzLmlzUmVhZE9ubHkgPyBmYWxzZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICAgIHN0eWxlcz17Y3VycmVuY3lTZWxlY3RTdHlsZXMgYXMgUmVhY3RTZWxlY3RQcm9wc1snc3R5bGVzJ119XG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVDdXJyZW5jeUZvY3VzfVxuICAgICAgICAgICAgbWVudVBvcnRhbFRhcmdldD17cHJvcHMubWVudVBvcnRhbFRhcmdldH1cbiAgICAgICAgICAgIG1lbnVTaG91bGRCbG9ja1Njcm9sbD17cHJvcHMubWVudVNob3VsZEJsb2NrU2Nyb2xsfVxuICAgICAgICAgICAgbWVudVBsYWNlbWVudD1cImF1dG9cIlxuICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVDdXJyZW5jeUJsdXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ3VycmVuY3lDaGFuZ2V9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImN1cnJlbmN5LWRyb3Bkb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e2Ftb3VudElucHV0UmVmfVxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgICAgICBuYW1lPXtnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVBbW91bnRGb2N1c31cbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZS5hbW91bnR9XG4gICAgICAgICAgICBjc3M9e1tcbiAgICAgICAgICAgICAgZ2V0QW1vdW50SW5wdXRTdHlsZXMoeyAuLi5wcm9wcywgaGFzRm9jdXMgfSksXG4gICAgICAgICAgICAgIC8vIGFjY291bnRzIGZvciBzaXplIG9mIGljb25cbiAgICAgICAgICAgICAgcHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmXG4gICAgICAgICAgICAgICAgaXNIaWdoUHJlY2lzaW9uICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzQwfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICBjdXJyZW5jeUhhc0ZvY3VzICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWR9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFtb3VudENoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQW1vdW50Qmx1cn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmlzQXV0b2ZvY3Vzc2VkfVxuICAgICAgICAgICAgey4uLmZpbHRlckRhdGFBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQsXG4gICAgICAgICAgICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvKiBBUklBICovXG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3Byb3BzWydhcmlhLWludmFsaWQnXX1cbiAgICAgICAgICAgIGFyaWEtZXJyb3JtZXNzYWdlPXtwcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiYgaXNIaWdoUHJlY2lzaW9uICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHshcHJvcHMuaXNEaXNhYmxlZCAmJiA8ZGl2IGlkPXtnZXRQb3J0YWxJZChwcm9wcy5pZCl9IC8+fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMoe1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgb2ZmPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wLWVuZFwiXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgbmVnYXRpdmUgbWFyZ2luIHRvIG1ha2UgdXAgZm9yIHRoZSBwYWRkaW5nIGluIHRoZSBUb29sdGlwIFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRvb2x0aXAgaXMgZmx1c2ggd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYCR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gLSR7ZGVzaWduVG9rZW5zLnNwYWNpbmcxMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAwYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmhpZ2hQcmVjaXNpb24pfVxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgICAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFBvcnRhbCxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */"), process.env.NODE_ENV === "production" ? "" : ";label:MoneyInput;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtMUJZIiwiZmlsZSI6Im1vbmV5LWlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgaGFzIGZyb20gJ2xvZGFzaC9oYXMnO1xuaW1wb3J0IFNlbGVjdCwge1xuICBjb21wb25lbnRzLFxuICB0eXBlIFNpbmdsZVZhbHVlUHJvcHMsXG4gIHR5cGUgUHJvcHMgYXMgUmVhY3RTZWxlY3RQcm9wcyxcbn0gZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7IGNzcywgdHlwZSBUaGVtZSB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGRlc2lnblRva2VucyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHtcbiAgd2FybmluZyxcbiAgaXNOdW1iZXJpc2gsXG4gIGZpbHRlckRhdGFBdHRyaWJ1dGVzLFxuICBjcmVhdGVTZXF1ZW50aWFsSWQsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3V0aWxzJztcbmltcG9ydCBUb29sdGlwIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3Rvb2x0aXAnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd25JbmRpY2F0b3IsXG4gIGNyZWF0ZVNlbGVjdFN0eWxlcyxcbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvc2VsZWN0LXV0aWxzJztcbmltcG9ydCB7IEZyYWN0aW9uRGlnaXRzSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBDb25zdHJhaW50cyBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9jb25zdHJhaW50cyc7XG5pbXBvcnQgeyB1c2VGaWVsZElkLCB1c2VUb2dnbGVTdGF0ZSB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2hvb2tzJztcbmltcG9ydCBhbGxDdXJyZW5jaWVzIGZyb20gJy4vY3VycmVuY2llcyc7XG5pbXBvcnQge1xuICBnZXRIaWdoUHJlY2lzaW9uV3JhcHBlclN0eWxlcyxcbiAgZ2V0Q3VycmVuY3lMYWJlbFN0eWxlcyxcbiAgZ2V0QW1vdW50SW5wdXRTdHlsZXMsXG59IGZyb20gJy4vbW9uZXktaW5wdXQuc3R5bGVzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuL21lc3NhZ2VzJztcblxuY29uc3QgVG9vbHRpcFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCA9IGNyZWF0ZVNlcXVlbnRpYWxJZCgnbW9uZXktaW5wdXQtJyk7XG5cbmNvbnN0IGdldFBvcnRhbElkID0gKGlkPzogc3RyaW5nKSA9PiBgcG9ydGFsLSR7aWR9YDtcbmNvbnN0IGdldFBvcnRhbE5vZGUgPSAoaWQ/OiBzdHJpbmcpID0+XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2dldFBvcnRhbElkKGlkKX1gKTtcblxudHlwZSBUTGFiZWwgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBvcnRhbCA9IChwcm9wczogVExhYmVsKSA9PiB7XG4gIGNvbnN0IGRvbU5vZGUgPSBnZXRQb3J0YWxOb2RlKHByb3BzLmlkKTtcbiAgaWYgKGRvbU5vZGUpIHtcbiAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKHByb3BzLmNoaWxkcmVuLCBkb21Ob2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IEN1cnJlbmN5TGFiZWwgPSAocHJvcHM6IFRMYWJlbCkgPT4gKFxuICA8bGFiZWwgaHRtbEZvcj17cHJvcHMuaWR9IGNzcz17Z2V0Q3VycmVuY3lMYWJlbFN0eWxlcyhwcm9wcyl9PlxuICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgPC9sYWJlbD5cbik7XG5cbkN1cnJlbmN5TGFiZWwuZGlzcGxheU5hbWUgPSAnQ3VycmVuY3lMYWJlbCc7XG5cbnR5cGUgVFNpbmdsZVZhbHVlID0ge1xuICBpZD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG59ICYgU2luZ2xlVmFsdWVQcm9wcztcblxuY29uc3QgU2luZ2xlVmFsdWUgPSAoeyBpZCwgLi4ucHJvcHMgfTogVFNpbmdsZVZhbHVlKSA9PiAoXG4gIDxjb21wb25lbnRzLlNpbmdsZVZhbHVlIHsuLi5wcm9wc30+XG4gICAgPGxhYmVsIGh0bWxGb3I9e2lkfT57cHJvcHMuY2hpbGRyZW59PC9sYWJlbD5cbiAgPC9jb21wb25lbnRzLlNpbmdsZVZhbHVlPlxuKTtcblxuU2luZ2xlVmFsdWUuZGlzcGxheU5hbWUgPSAnU2luZ2xlVmFsdWUnO1xuXG50eXBlIFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9IChcbiAgaW5wdXQ6IFRJbnB1dFByb3BzICYge1xuICAgIGN1cnJlbmN5SGFzRm9jdXM/OiBib29sZWFuO1xuICB9XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFRJbnB1dFByb3BzID0ge1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHRoZW1lPzogVGhlbWU7XG59O1xuXG50eXBlIFRCYXNlID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xufTtcbi8vIG92ZXJ3cml0ZSBzdHlsZXMgb2YgY3JlYXRlU2VsZWN0U3R5bGVzXG5jb25zdCBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlczogVENyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzID0gKHtcbiAgaGFzV2FybmluZyxcbiAgaGFzRXJyb3IsXG4gIGlzQ29uZGVuc2VkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlYWRPbmx5LFxuICBtZW51UG9ydGFsWkluZGV4LFxuICBjdXJyZW5jeUhhc0ZvY3VzLFxufSkgPT4ge1xuICBjb25zdCBzZWxlY3RTdHlsZXMgPSBjcmVhdGVTZWxlY3RTdHlsZXMoe1xuICAgIGhhc1dhcm5pbmcsXG4gICAgaGFzRXJyb3IsXG4gICAgbWVudVBvcnRhbFpJbmRleCxcbiAgICBpc0NvbmRlbnNlZCxcbiAgICBpc1JlYWRPbmx5LFxuICAgIGlzRGlzYWJsZWQsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLnNlbGVjdFN0eWxlcyxcbiAgICBjb250cm9sOiAoYmFzZTogVEJhc2UsIHN0YXRlOiBSZWFjdFNlbGVjdFByb3BzKSA9PiAoe1xuICAgICAgLi4uc2VsZWN0U3R5bGVzLmNvbnRyb2woYmFzZSwgc3RhdGUpLFxuICAgICAgcGFkZGluZzogYDAgJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzI1fWAsXG4gICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzAnLFxuICAgICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlclJpZ2h0OiAnMCcsXG4gICAgICBtaW5XaWR0aDogJzgwcHgnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBib3JkZXJDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkRpc2FibGVkfSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlblJlYWRvbmx5fSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRXJyb3I7XG4gICAgICAgIGlmIChoYXNXYXJuaW5nKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGN1cnJlbmN5SGFzRm9jdXMpIHtcbiAgICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRm9jdXNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXQ7XG4gICAgICB9KSgpLFxuICAgICAgY3Vyc29yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuICdub3QtYWxsb3dlZCc7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gYGRlZmF1bHRgO1xuICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgfSkoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0pKCksXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0LFxuICAgICAgfSxcbiAgICAgICcmOmhvdmVyOm5vdCg6cmVhZC1vbmx5KTpub3QoOmRpc2FibGVkKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuSG92ZXJlZCxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgc2luZ2xlVmFsdWU6IChiYXNlOiBUQmFzZSkgPT4gKHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWF4V2lkdGg6ICdpbml0aWFsJyxcbiAgICAgIGNvbG9yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmZvbnRDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5XYXJuaW5nO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seTtcbiAgICAgICAgcmV0dXJuIGJhc2UuY29sb3I7XG4gICAgICB9KSgpLFxuICAgIH0pLFxuICAgIGRyb3Bkb3duSW5kaWNhdG9yOiAoKSA9PiAoe1xuICAgICAgZmlsbDogaXNSZWFkT25seVxuICAgICAgICA/IGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seVxuICAgICAgICA6IGRlc2lnblRva2Vucy5jb2xvck5ldXRyYWw0MCxcbiAgICB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFRDdXJyZW5jeUNvZGUgPSBrZXlvZiB0eXBlb2YgYWxsQ3VycmVuY2llcztcblxudHlwZSBUTW9uZXlDb25kaXRpb25hbFByb3BzID1cbiAgfCB7IHR5cGU6ICdoaWdoUHJlY2lzaW9uJzsgcHJlY2lzZUFtb3VudDogbnVtYmVyIH1cbiAgfCB7XG4gICAgICAvKipcbiAgICAgICAqIFVzdWFsbHkgZWl0aGVyIGEgYGNlbnRQcmVjaXNpb25gIG9yIGEgYGhpZ2hQcmVjaXNpb25gLlxuICAgICAgICovXG4gICAgICB0eXBlOiAnY2VudFByZWNpc2lvbic7XG4gICAgICBwcmVjaXNlQW1vdW50PzogbmV2ZXI7XG4gICAgfTtcbmV4cG9ydCB0eXBlIFRNb25leVZhbHVlID0ge1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGU7XG4gIGNlbnRBbW91bnQ6IG51bWJlcjtcbiAgZnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcbn0gJiBUTW9uZXlDb25kaXRpb25hbFByb3BzO1xuLy8gVGhlIE1vbmV5SW5wdXQgY29tcG9uZW50IGFsd2F5cyBvcGVyYXRlcyBvbiBhIHZhbHVlIGNvbnNpc3Rpbmcgb2Y6XG4vLyBgYGBcbi8vIHsgYW1vdW50OiBTdHJpbmcsIGN1cnJlbmN5Q29kZTogU3RyaW5nIH1cbi8vIGBgYFxuLy9cbi8vIFRoZSBhbW91bnQgbWF5IG9ubHkgdXNlIGEgZG90IGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbi8vIFRoZSBgY3VycmVuY3lDb2RlYCBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy9cbi8vIFRoZSBgTW9uZXlJbnB1dGAgZG9lcyBub3QgZG8gYW55IHZhbGlkYXRpb24gb24gaXRzIG93bi4gSXQgb25seSBzZXJ2ZXMgYXMgYSB3YXlcbi8vIHRvIGdldCB0aGUgYW1vdW50IGFuZCBgY3VycmVuY3lDb2RlYCBpbnB1dCBmcm9tIHRoZSB1c2VyLiBWYWxpZGF0aW9uIGlzIGFsd2F5c1xuLy8gdXAgdG8gdGhlIHBhcmVudC5cbi8vXG4vLyBUaGUgQ1RQIEFQSSBzdXBwb3J0cyB0d28gdHlwZXMgb2YgcHJpY2VzOiBgY2VudFByZWNpc2lvbmAgYW5kIGBoaWdoUHJlY2lzaW9uYC5cbi8vIFRoZSBgTW9uZXlJbnB1dGAgaXRzZWxmIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlc2UuIEhvd2V2ZXIsXG4vLyBpdCBoYXMgdHdvIHN0YXRpYyBtZXRob2RzIGRlZmluZWQgKGBjb252ZXJ0VG9Nb25leVZhbHVlYCBhbmQgYHBhcnNlTW9uZXlWYWx1ZWApLFxuLy8gd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGBNb25leUlucHV0YCB2YWx1ZSBhbmQgdGhlIGBNb25leVZhbHVlYFxuLy8gc3VwcG9ydGVkIGJ5IHRoZSBBUEkuXG4vLyBTb21lIHBsYWNlcyBpbiB0aGUgQVBJIGRvIG5vdCBzdXBwb3J0IGBoaWdoUHJlY2lzaW9uYCBwcmljZXMsIGJ1dCB0aGVcbi8vIGBjb252ZXJ0VG9Nb25leVZhbHVlIGB3aWxsIGFsd2F5cyByZXR1cm4gZWl0aGVyIGEgYGNlbnRQcmVjaXNpb24gYG9yIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQncyB1cCB0aGUgYE1vbmV5SW5wdXRgJ3MgcGFyZW50IHRvIHNob3cgYSB2YWxpZGF0aW9uXG4vLyBlcnJvciBpbiBjYXNlIGEgYGhpZ2hQcmVjaXNpb25gIHByaWNlIGlzIHVzZWQuXG4vL1xuLy8gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFzIHRvIGhhdmUgYGhpZ2hQcmVjaXNpb25gIHdoZW4gdGhlIG51bWJlciBvZiBzdXBwbGllZFxuLy8gZnJhY3Rpb24gZGlnaXRzIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0aGUgY3VycmVuY3kgdXNlcy4gRm9yXG4vLyBleGFtcGxlLCBgRVVSIDQyLjAwYCBpcyBhbHdheXMgYSBgY2VudFByZWNpc2lvbmAgcHJpY2UsIHdoaWxlIGBFVVIgNDIuMDAxYCBpcyBhbHdheXMgYVxuLy8gYGhpZ2hQcmVjaXNpb25gIHByaWNlLiBJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBgRVVSIDQyLjAwYCBhcyBhIGBoaWdoUHJlY2lzaW9uYFxuLy8gcHJpY2UuXG4vL1xuLy8gVGhlIGZpcnN0IHRpbWUgdGhlIGNvbXBvbmVudCByZW5kZXJzLCB3ZSB3YW50IHRvIHRyeSB0byBzaG93IHRoZSBgY2VudEFtb3VudGBcbi8vIGFzIGEgZm9ybWF0dGVkIG51bWJlci4gVG8gYWNoaWV2ZSB0aGlzLCB0aGUgYHBhcnNlTW9uZXlWYWx1ZWAgZnVuY3Rpb24gY2FuXG4vLyBiZSB1c2VkIHRvIHR1cm4gdGhlIEFQSSB2YWx1ZSBpbnRvIGEgdmFsdWUgdGhlIGBNb25leUlucHV0YCB1bmRlcnN0YW5kcy5cbi8vIER1cmluZyB0aGlzIHRyYW5zZm9ybWF0aW9uLCB0aGUgbW9uZXkgdmFsdWUgd2lsbCBnZXQgZm9ybWF0dGVkIGludG8gXCJhbW91bnRcIi5cbi8vXG4vLyBXaGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlLCB3ZSBkb24ndCB3YW50IHRvIGZvcm1hdCBhZ2Fpbi4gV2Ugb25seSBmb3JtYXRcbi8vIGluIGNhc2UgdGhlIHVzZXIgYmx1cnMgdGhlIGZpZWxkLiBUaGlzIGF2b2lkcyBtYW55IGVkZ2UgY2FzZXMgd2hlcmUgdGhlXG4vLyBmb3JtYXR0aW5nIHdvdWxkIG1lc3Mgd2l0aCB0aGUgdXNlcidzIGlucHV0LlxuLy9cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgY2VudFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gICBcInR5cGVcIjogXCJjZW50UHJlY2lzaW9uXCIsXG4vLyAgIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgIFwiY2VudEFtb3VudFwiOiA0MjAwLFxuLy8gICBcImZyYWN0aW9uRGlnaXRzXCI6IDJcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgNDIuMDBgLlxuLy9cbi8vIEEgZnVsbCBleGFtcGxlIG9mIGFuIGBNb25leVZhbHVlYCB3aXRoIGBoaWdoUHJlY2lzaW9uYCB3b3VsZCBiZVxuLy8gYGBgXG4vLyB7XG4vLyAgXCJ0eXBlXCI6IFwiaGlnaFByZWNpc2lvblwiLFxuLy8gIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgXCJjZW50QW1vdW50XCI6IDEsXG4vLyAgXCJwcmVjaXNlQW1vdW50XCI6IDEyMzQ1Nixcbi8vICBcImZyYWN0aW9uRGlnaXRzXCI6IDdcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgMC4wMTIzNDU2YFxuXG4vLyBQYXJzaW5nXG4vLyBTaW5jZSBtb3N0IHVzZXJzIGFyZSBub3QgY2FyZWZ1bCBhYm91dCBob3cgdGhleSBlbnRlciB2YWx1ZXMsIHdlIHdpbGwgcGFyc2Vcbi8vIGJvdGggYC5gIGFuZCBgLGAgYXMgZGVjaW1hbCBzZXBhcmF0b3JzLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLjAwMCwwMGAgd2UgcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLDAwMC4wMGAgd2UgYWxzbyBwYXJzZSBpdCBhcyBgMTAwMGAuXG4vL1xuLy8gVGhpcyBtZWFucyB0aGUgaGlnaGVzdCBhbW91bnQgYWx3YXlzIHdpbnMuIFdlIGRvIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBsYXN0XG4vLyBwb3NpdGlvbiBvZiBgLmAgYW5kIGAsYC4gV2hhdGV2ZXIgb2NjdXJzIGxhdGVyIGlzIHVzZWQgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuZXhwb3J0IGNvbnN0IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIgPSAocmF3QW1vdW50OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gIGxldCBmcmFjdGlvbnNTZXBhcmF0b3I7XG5cbiAgaWYgKGxvY2FsZSkge1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9ICgyLjUpIC8vIHdlIG5lZWQgYW55IG51bWJlciB3aXRoIGZyYWN0aW9ucywgc28gdGhhdCB3ZSBrbm93IHdoYXQgaXMgdGhlIGZyYWN0aW9uXG4gICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSAvLyBcInN5bWJvbFwiIGZvciB0aGUgcHJvdmlkZWQgbG9jYWxlXG4gICAgICAucmVwbGFjZSgvXFxkL2csICcnKTsgLy8gdGhlbiB3ZSByZW1vdmUgdGhlIG51bWJlcnMgYW5kIGtlZXAgdGhlIFwic3ltYm9sXCJcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0RG90ID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJy4nKTtcbiAgICBjb25zdCBsYXN0Q29tbWEgPSBTdHJpbmcocmF3QW1vdW50KS5sYXN0SW5kZXhPZignLCcpO1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9IGxhc3RDb21tYSA+IGxhc3REb3QgPyAnLCcgOiAnLic7XG4gIH1cbiAgZnJhY3Rpb25zU2VwYXJhdG9yID0gZnJhY3Rpb25zU2VwYXJhdG9yID09PSAnLicgPyAnXFxcXC4nIDogZnJhY3Rpb25zU2VwYXJhdG9yOyAvLyBoZXJlIHdlIGVzY2FwZSB0aGUgJy4nIHRvIHVzZSBpdCBhcyByZWdleFxuICAvLyBUaGUgcmF3IGFtb3VudCB3aXRoIG9ubHkgb25lIHNwYXJhdG9yXG4gIGNvbnN0IG5vcm1hbGl6ZWRBbW91bnQgPSBTdHJpbmcocmF3QW1vdW50KVxuICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFteLTAtOSR7ZnJhY3Rpb25zU2VwYXJhdG9yfV1gLCAnZycpLCAnJykgLy8gd2UganVzdCBrZWVwIHRoZSBudW1iZXJzIGFuZCB0aGUgZnJhY3Rpb24gc3ltYm9sXG4gICAgLnJlcGxhY2UoZnJhY3Rpb25zU2VwYXJhdG9yLCAnLicpOyAvLyB0aGVuIHdlIGNoYW5nZSB3aGF0ZXZlciBgZnJhY3Rpb25zU2VwYXJhdG9yYCB3YXMgdG8gYC5gIHNvIHdlIGNhbiBwYXJzZSBpdCBhcyBmbG9hdFxuXG4gIHJldHVybiBwYXJzZUZsb2F0KG5vcm1hbGl6ZWRBbW91bnQpO1xufTtcblxuLy8gVHVybnMgdGhlIHVzZXIgaW5wdXQgaW50byBhIHZhbHVlIHRoZSBNb25leUlucHV0IGNhbiBwYXNzIHVwIHRocm91Z2ggb25DaGFuZ2Vcbi8vIEluIGNhc2UgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgY29udGFpbmVkIGluIFwiYW1vdW50XCIgZXhjZWVkcyB0aGVcbi8vIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMsIGl0IHdpbGwgZW1pdCBhIHByaWNlIG9mXG4vLyB0eXBlIFwiaGlnaFByZWNpc2lvblwiIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgXCJjZW50UHJlY2lzaW9uXCIuXG4vLyBJdCB3aWxsIHJldHVybiBcIm51bGxcIiBpbiBjYXNlIGFuIGludmFsaWQgdmFsdWUgaXMgZW50ZXJlZC5cbi8vIFRoZSB2YWx1ZSBpcyBpbnZhbGlkIHdoZW5cbi8vICAtIG5vIGFtb3VudCB3YXMgZW50ZXJlZFxuLy8gIC0gYW4gaW52YWxpZCBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIG5vIGN1cnJlbmN5IHdhcyBzZWxlY3RlZFxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgXCJhbW91bnRcIiB0byBiZSBhIHRyaW1tZWQgdmFsdWUuXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb25leVZhbHVlID0gKFxuICByYXdBbW91bnQ6IHN0cmluZyxcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGN1cnJlbmN5Q29kZT86IFRDdXJyZW5jeUNvZGUgfCAnJ1xuKTogVE1vbmV5VmFsdWUgfCBudWxsID0+IHtcbiAgaWYgKCFjdXJyZW5jeUNvZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGN1cnJlbmN5ID0gYWxsQ3VycmVuY2llc1tjdXJyZW5jeUNvZGVdO1xuICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgLy8gVGhlIHVzZXIgbWF5IGVudGVyIGEgdmFsdWUgd2l0aCBhIGNvbW1hLCBkb3QsIG9yIGFwb3N0cm9waGUgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuICBpZiAocmF3QW1vdW50Lmxlbmd0aCA9PT0gMCB8fCAhaXNOdW1iZXJpc2gocmF3QW1vdW50KSkgcmV0dXJuIG51bGw7XG5cbiAgd2FybmluZyhcbiAgICBsb2NhbGUgfHwgY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMgIT09IDAsXG4gICAgYE1vbmV5SW5wdXQ6IEEgbG9jYWxlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBjdXJyZW5jeSBoYXMgbm8gZnJhY3Rpb24gZGlnaXRzICgke2N1cnJlbmN5Q29kZX0pYFxuICApO1xuICBjb25zdCBhbW91bnRBc051bWJlciA9IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIocmF3QW1vdW50LCBsb2NhbGUpO1xuICBpZiAoaXNOYU4oYW1vdW50QXNOdW1iZXIpKSByZXR1cm4gbnVsbDtcblxuICAvLyBUaGUgY2VudCBhbW91bnQgaXMgcm91bmRlZCB0byB0aGUgY3VycmVuY2llJ3MgZGVmYXVsdCBudW1iZXJcbiAgLy8gb2YgZnJhY3Rpb24gZGlnaXRzIGZvciBwcmljZXMgd2l0aCBoaWdoIHByZWNpc2lvbi5cbiAgLy9cbiAgLy8gQWRkaXRpb25hbGx5LCBKYXZhU2NyaXB0IGlzIHNvbWV0aW1lcyBpbmNvcnJlY3Qgd2hlbiBtdWx0aXBseWluZyBmbG9hdHMsXG4gIC8vICAgZS5nLiAyLjQ5ICogMTAwIC0+IDI0OS4wMDAwMDAwMDAwMDAwM1xuICAvLyBXaGlsZSBpbmFjY3VyYWN5IGZyb20gbXVsdGlwbHlpbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBpcyBhXG4gIC8vIGdlbmVyYWwgcHJvYmxlbSBpbiBKUywgd2UgY2FuIGF2b2lkIGl0IGJ5IGN1dHRpbmcgb2ZmIGFsbFxuICAvLyBkZWNpbWFscy4gVGhpcyBpcyBwb3NzaWJsZSBzaW5jZSBjZW50cyBpcyB0aGUgYmFzZSB1bml0LCBzbyB3ZVxuICAvLyBvcGVyYXRlIG9uIGludGVnZXJzIGFueXdheXNcbiAgLy8gQWxzbyB3ZSBzaG91bGQgdGhlIHJvdW5kIHRoZSB2YWx1ZSB0byBlbnN1cmUgdGhhdCB3ZSBjb21lIGNsb3NlXG4gIC8vIHRvIHRoZSBuZWFyZXN0IGRlY2ltYWwgdmFsdWVcbiAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vY29tbWVyY2V0b29scy9tZXJjaGFudC1jZW50ZXItZnJvbnRlbmQvcHVsbC83NzBcbiAgY29uc3QgY2VudEFtb3VudCA9IE1hdGgudHJ1bmMoXG4gICAgTWF0aC5yb3VuZChhbW91bnRBc051bWJlciAqIDEwICoqIGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKVxuICApO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPVxuICAgIC8vIFRoZSBjb252ZXJzaW9uIHRvIGEgc3RyaW5nIHdpbGwgYWx3YXlzIHVzZSBhIGRvdCBhcyB0aGUgc2VwYXJhdG9yLlxuICAgIC8vIFRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgYSBjb21tYS5cbiAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSA9PT0gLTFcbiAgICAgID8gMFxuICAgICAgOiBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmxlbmd0aCAtIFN0cmluZyhhbW91bnRBc051bWJlcikuaW5kZXhPZignLicpIC0gMTtcblxuICBpZiAoZnJhY3Rpb25EaWdpdHNPZkFtb3VudCA+IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdoaWdoUHJlY2lzaW9uJyxcbiAgICAgIGN1cnJlbmN5Q29kZSxcbiAgICAgIGNlbnRBbW91bnQsXG4gICAgICBwcmVjaXNlQW1vdW50OiBwYXJzZUludChcbiAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGNvbnZlcnQgIGEgbnVtYmVyIGxpa2UgOC4wNjY2NTIgdG8gaXRzIGNlbnRhbW91bnRcbiAgICAgICAgLy8gV2UgY291bGQgZG8gdGhhdCBieSBtdWx0aXBseWluZyBpdCB3aXRoIDEwICoqIG51bWJlci1vZi1mcmFjdGlvbi1kaWdpdHNcbiAgICAgICAgLy8gYnV0IHRoZW4gd2UnbGwgcnVuIGludG8gcHJvYmxlbXMgd2l0aCBKYXZhU2NyaXB0J3MgZmxvYXRpbmcgcG9pbnRcbiAgICAgICAgLy8gbnVtYmVyIHByZWNpc2lvbiBhbmQgZW5kIHVwIHdpdGggODA2NjY1MS45OTk5OTk5LCBhbmQgdGhlbiBwYXJzZUludFxuICAgICAgICAvLyBjdXRzIG9mZiB0aGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBTbyBpbnN0ZWFkIG9mIHVzaW5nIG1hdGhzIHRvIGNvbnZlcnQgdGhlIG51bWJlciwgd2UganVzdCByZXBsYWNlXG4gICAgICAgIC8vIHRoZSBkb3QgaW5zaWRlIHRoZSBudW1iZXIgd2hpY2ggZG9lcyB0aGUgc2FtZSB0aGluZy5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIFwiLFwiIGFzIHdlbGwsIGFzIG51bWJlcnMgYWx3YXlzIHVzIGEgZG90XG4gICAgICAgIC8vIHdoZW4gY29udmVydGVkIHVzaW5nIFN0cmluZygpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgbWF0aGVtYXRpY2FsIHdheTogYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgICAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLnJlcGxhY2UoJy4nLCAnJyksXG4gICAgICAgIDEwXG4gICAgICApLFxuICAgICAgZnJhY3Rpb25EaWdpdHM6IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICBjZW50QW1vdW50LFxuICAgIGZyYWN0aW9uRGlnaXRzOiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cyxcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVFbXB0eU1vbmV5VmFsdWUgPSAoY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlKTogVE1vbmV5VmFsdWUgPT4gKHtcbiAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICBjdXJyZW5jeUNvZGUsXG4gIGNlbnRBbW91bnQ6IE5hTixcbiAgZnJhY3Rpb25EaWdpdHM6IDIsXG59KTtcblxuY29uc3QgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZSA9IChtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSkgPT5cbiAgbW9uZXlWYWx1ZS50eXBlID09PSAnaGlnaFByZWNpc2lvbidcbiAgICA/IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCAvIDEwICoqIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHNcbiAgICA6IG1vbmV5VmFsdWUuY2VudEFtb3VudCAvXG4gICAgICAxMCAqKiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuLy8gZ2V0cyBjYWxsZWQgd2l0aCBhIHN0cmluZyBhbmQgc2hvdWxkIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmdcbmNvbnN0IGZvcm1hdEFtb3VudCA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGVcbikgPT4ge1xuICAvLyBmYWxsYmFjayBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCBlbnRlciBhbiBhbW91bnQgeWV0IChvciBpdCdzIGludmFsaWQpXG4gIGNvbnN0IG1vbmV5VmFsdWUgPVxuICAgIGNyZWF0ZU1vbmV5VmFsdWUocmF3QW1vdW50LCBsb2NhbGUsIGN1cnJlbmN5Q29kZSkgfHxcbiAgICBjcmVhdGVFbXB0eU1vbmV5VmFsdWUoY3VycmVuY3lDb2RlKTtcblxuICBjb25zdCBhbW91bnQgPSBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gbW9uZXlWYWx1ZS5wcmVjaXNlQW1vdW50XG4gICAgPyBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuICByZXR1cm4gaXNOYU4oYW1vdW50KVxuICAgID8gJydcbiAgICA6IGFtb3VudC50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0cyB9KTtcbn07XG5cbmNvbnN0IGdldEFtb3VudElucHV0TmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uYW1vdW50YCA6IHVuZGVmaW5lZDtcbmNvbnN0IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lID0gKG5hbWU/OiBzdHJpbmcpID0+XG4gIG5hbWUgPyBgJHtuYW1lfS5jdXJyZW5jeUNvZGVgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBUVmFsdWUgPSB7XG4gIGFtb3VudDogc3RyaW5nO1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGUgfCAnJztcbn07XG5cbnR5cGUgVEN1c3RvbUV2ZW50ID0ge1xuICB0YXJnZXQ6IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICB9O1xuICBwZXJzaXN0PzogKCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgVE1vbmV5SW5wdXRQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFVzZWQgYXMgSFRNTCBpZCBwcm9wZXJ0eS4gQW4gaWQgaXMgYXV0by1nZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgYGF1dG9jb21wbGV0ZWAgcHJvcGVydHlcbiAgICovXG4gIGF1dG9Db21wbGV0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlIGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICAgKi9cbiAgJ2FyaWEtaW52YWxpZCc/OiBib29sZWFuO1xuICAvKipcbiAgICogSFRNTCBJRCBvZiBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYW4gZXJyb3IgbWVzc2FnZSByZWxhdGVkIHRvIHRoZSBpbnB1dC5cbiAgICovXG4gICdhcmlhLWVycm9ybWVzc2FnZSc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHVzZWQgdG8gY3JlYXRlIGEgSFRNTCBgbmFtZWAgcHJvcGVydHkgZm9yIHRoZSBhbW91bnQgaW5wdXQgZmllbGQgKGAke25hbWV9LmFtb3VudGApIGFuZCB0aGUgY3VycmVuY3kgZHJvcGRvd24gKGAke25hbWV9LmN1cnJlbmN5Q29kZWApLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBpbnB1dC4gQ29uc2lzdHMgb2YgdGhlIGN1cnJlbmN5IGNvZGUgYW5kIGFuIGFtb3VudC4gYGFtb3VudGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhbW91bnQuIEEgZG90IGhhcyB0byBiZSB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgICovXG4gIHZhbHVlOiBUVmFsdWU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvc3NpYmxlIGN1cnJlbmNpZXMuIFdoZW4gbm90IHByb3ZpZGVkIG9yIGVtcHR5LCB0aGUgY29tcG9uZW50IHJlbmRlcnMgYSBsYWJlbCB3aXRoIHRoZSB2YWx1ZSdzIGN1cnJlbmN5IGluc3RlYWQgb2YgYSBkcm9wZG93bi5cbiAgICovXG4gIGN1cnJlbmNpZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBibHVycmVkXG4gICAqL1xuICBvbkJsdXI/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGlucHV0IGlzIGZvY3VzZWRcbiAgICovXG4gIG9uRm9jdXM/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlZHVjZSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNvbXBvbmVudCBmb3IgYSB1aSBjb21wYWN0IHZhcmlhbnRcbiAgICovXG4gIGlzQ29uZGVuc2VkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBjYW5ub3QgYmUgbW9kaWZpZWQgKGUuZyBub3QgYXV0aG9yaXplZCwgb3IgY2hhbmdlcyBjdXJyZW50bHkgc2F2aW5nKS5cbiAgICovXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkIGlzIGRpc3BsYXlpbmcgcmVhZC1vbmx5IGNvbnRlbnRcbiAgICovXG4gIGlzUmVhZE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogRm9jdXMgdGhlIGlucHV0IG9uIGluaXRpYWwgcmVuZGVyXG4gICAqL1xuICBpc0F1dG9mb2N1c3NlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgZXZlbnQgb2YgdGhlIGlucHV0IG9yIGRyb3Bkb3duIHdoZW4gZWl0aGVyIHRoZSBjdXJyZW5jeSBvciB0aGUgYW1vdW50IGhhdmUgY2hhbmdlZC5cbiAgICovXG4gIG9uQ2hhbmdlPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBEb20gZWxlbWVudCB0byBwb3J0YWwgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHRvXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51UG9ydGFsVGFyZ2V0PzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVBvcnRhbFRhcmdldCddO1xuICAvKipcbiAgICogei1pbmRleCB2YWx1ZSBmb3IgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHBvcnRhbFxuICAgKiA8YnI+XG4gICAqIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBtZW51UG9ydGFsVGFyZ2V0YFxuICAgKi9cbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhlIG1lbnUgc2hvdWxkIGJsb2NrIHNjcm9sbCB3aGlsZSBvcGVuXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51U2hvdWxkQmxvY2tTY3JvbGw/OiBSZWFjdFNlbGVjdFByb3BzWydtZW51U2hvdWxkQmxvY2tTY3JvbGwnXTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IGlucHV0IGhhcyBlcnJvcnNcbiAgICovXG4gIGhhc0Vycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2wgdG8gaW5kaWNhdGUgb24gdGhlIGlucHV0IGlmIHRoZXJlIGFyZSBzZWxlY3RlZCB2YWx1ZXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgaW52YWxpZFxuICAgKi9cbiAgaGFzV2FybmluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93cyBoaWdoIHByZWNpc2lvbiBiYWRnZSBpbiBjYXNlIGN1cnJlbnQgdmFsdWUgdXNlcyBoaWdoIHByZWNpc2lvbi5cbiAgICovXG4gIGhhc0hpZ2hQcmVjaXNpb25CYWRnZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHNpemUgbGltaXQgb2YgdGhlIGlucHV0IGZpZWxkcy5cbiAgICovXG4gIGhvcml6b250YWxDb25zdHJhaW50PzpcbiAgICB8IDNcbiAgICB8IDRcbiAgICB8IDVcbiAgICB8IDZcbiAgICB8IDdcbiAgICB8IDhcbiAgICB8IDlcbiAgICB8IDEwXG4gICAgfCAxMVxuICAgIHwgMTJcbiAgICB8IDEzXG4gICAgfCAxNFxuICAgIHwgMTVcbiAgICB8IDE2XG4gICAgfCAnc2NhbGUnXG4gICAgfCAnYXV0byc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVuY3kgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgTW9uZXlJbnB1dCA9ICh7XG4gIGN1cnJlbmNpZXMgPSBbXSxcbiAgaG9yaXpvbnRhbENvbnN0cmFpbnQgPSAnc2NhbGUnLFxuICBtZW51UG9ydGFsWkluZGV4ID0gMSxcbiAgLi4ucHJvcHNcbn06IFRNb25leUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW2N1cnJlbmN5SGFzRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdID0gdXNlVG9nZ2xlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYW1vdW50SGFzRm9jdXMsIHRvZ2dsZUFtb3VudEhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBhbW91bnRJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBtb25leUlucHV0SWQgPSB1c2VGaWVsZElkKHByb3BzLmlkLCBtb25leUlucHV0U2VxdWVudGlhbElkKTtcblxuICBpZiAoIXByb3BzLmlzUmVhZE9ubHkpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ01vbmV5SW5wdXQ6IFwib25DaGFuZ2VcIiBpcyByZXF1aXJlZCB3aGVuIGlzIG5vdCByZWFkIG9ubHkuJ1xuICAgICk7XG4gIH1cblxuICB3YXJuSWZNZW51UG9ydGFsUHJvcHNBcmVNaXNzaW5nKHtcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIG1lbnVQb3J0YWxUYXJnZXQ6IHByb3BzLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgY29tcG9uZW50TmFtZTogJ01vbmV5SW5wdXQnLFxuICB9KTtcblxuICBjb25zdCB7IG9uRm9jdXMgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFt0b2dnbGVBbW91bnRIYXNGb2N1cywgb25Gb2N1cywgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXSk7XG5cbiAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUFtb3VudEJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgYW1vdW50ID0gcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKTtcbiAgICB0b2dnbGVBbW91bnRIYXNGb2N1cyhmYWxzZSk7XG4gICAgLy8gU2tpcCBmb3JtYXR0aW5nIGZvciBlbXB0eSB2YWx1ZSBvciB3aGVuIHRoZSBpbnB1dCBpcyB1c2VkIHdpdGggYW5cbiAgICAvLyB1bmtub3duIGN1cnJlbmN5LlxuICAgIGlmIChcbiAgICAgIGFtb3VudC5sZW5ndGggPiAwICYmXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUgJiZcbiAgICAgIGFsbEN1cnJlbmNpZXNbcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXVxuICAgICkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkQW1vdW50ID0gZm9ybWF0QW1vdW50KFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGVcbiAgICAgICk7XG5cbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgZW50ZXJlZCBhIHZhbHVlIHdpdGggY2VudFByZWNpc2lvbiwgd2UgY2FuIGZvcm1hdFxuICAgICAgLy8gdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0aGF0IGN1cnJlbmN5LCBlLmcuIDIwLjEgdG8gMjAuMTBcbiAgICAgIGlmIChTdHJpbmcoZm9ybWF0dGVkQW1vdW50KSAhPT0gYW1vdW50KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBhbiBldmVudCB3aXRoIHRoZSBub3cgZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGZha2VFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBmb3JtYXR0ZWRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGludGwubG9jYWxlLFxuICAgIG9uQ2hhbmdlLFxuICAgIG1vbmV5SW5wdXRJZCxcbiAgICBwcm9wcy5uYW1lLFxuICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMsXG4gIF0pO1xuXG4gIGNvbnN0IGhhbmRsZUFtb3VudENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyaXNoKGV2ZW50LnRhcmdldC52YWx1ZSkpIHtcbiAgICAgICAgb25DaGFuZ2U/Lih7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb24udmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICE9PSBjdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIGZyb20gYSBjdXJyZW5jeSB3aXRoIDMgZnJhY3Rpb24gZGlnaXRzIHRvXG4gICAgICAgIC8vIGEgY3VycmVuY3kgd2l0aCAyIGZyYWN0aW9uIGRpZ2l0cywgYW5kIHdoZW4gdGhlIGlucHV0IHZhbHVlIHdhc1xuICAgICAgICAvLyBcIjkuMDAwXCIgKDkpLCB0aGVuIGl0IHNob3VsZCBjaGFuZ2UgdG8gXCI5LjAwXCIgdG8gcmVmbGVjdCB0aGUgbmV3XG4gICAgICAgIC8vIGN1cnJlbmN5J3MgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVuY3kgd2FzIGEgaGlnaC1wcmVjaXNpb24gcHJpY2UsIHRoZW4gbm8gZGlnaXRzIHNob3VsZFxuICAgICAgICAvLyBiZSBsb3N0XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgICBwcm9wcy52YWx1ZS5hbW91bnQudHJpbSgpLFxuICAgICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgdXNlciBjb3VsZCBiZSBjaGFuZ2luZyB0aGUgY3VycmVuY3kgYmVmb3JlIGVudGVyaW5nIGFueSBhbW91bnQsXG4gICAgICAgIC8vIG9yIHdoaWxlIHRoZSBhbW91bnQgaXMgaW52YWxpZC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRvbid0IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBhbW91bnQuXG4gICAgICAgIGNvbnN0IG5leHRBbW91bnQgPSBpc05hTihOdW1iZXIoZm9ybWF0dGVkQW1vdW50KSlcbiAgICAgICAgICA/IHByb3BzLnZhbHVlLmFtb3VudFxuICAgICAgICAgIDogZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICAgIC8vIGNoYW5nZSBjdXJyZW5jeSBjb2RlXG4gICAgICAgIGNvbnN0IGZha2VDdXJyZW5jeUV2ZW50ID0ge1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlQ3VycmVuY3lFdmVudCk7XG5cbiAgICAgICAgLy8gY2hhbmdlIGFtb3VudCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKHByb3BzLnZhbHVlLmFtb3VudCAhPT0gbmV4dEFtb3VudCkge1xuICAgICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0QW1vdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFtb3VudElucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBpbnRsLmxvY2FsZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbW9uZXlJbnB1dElkLFxuICAgICAgcHJvcHMubmFtZSxcbiAgICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICAgIHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyh0cnVlKTtcbiAgfSwgW29uRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMsIHByb3BzLm5hbWUsIG1vbmV5SW5wdXRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Qmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKGZhbHNlKTtcbiAgfSwgW3RvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdKTtcblxuICBjb25zdCBoYXNOb0N1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgaGFzRm9jdXMgPSBjdXJyZW5jeUhhc0ZvY3VzIHx8IGFtb3VudEhhc0ZvY3VzO1xuICBjb25zdCBjdXJyZW5jeVNlbGVjdFN0eWxlcyA9IGNyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nOiBwcm9wcy5oYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yOiBwcm9wcy5oYXNFcnJvcixcbiAgICBpc0NvbmRlbnNlZDogcHJvcHMuaXNDb25kZW5zZWQsXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1JlYWRPbmx5OiBwcm9wcy5pc1JlYWRPbmx5LFxuICAgIG1lbnVQb3J0YWxaSW5kZXg6IG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgY3VycmVuY3lIYXNGb2N1cyxcbiAgfSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGxhYmVsOiBjdXJyZW5jeUNvZGUsXG4gICAgdmFsdWU6IGN1cnJlbmN5Q29kZSxcbiAgfSkpO1xuXG4gIGNvbnN0IG9wdGlvbiA9ICgoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb25DYW5kaWRhdGUpID0+IG9wdGlvbkNhbmRpZGF0ZS52YWx1ZSA9PT0gcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgLy8gZW5zdXJlIGFuIG9wdGlvbiBpcyBmb3VuZCwgZXZlbiB3aGVuIHRoZSBjdXJyZW5jaWVzIGRvbid0IGluY2x1ZGVcbiAgICAvLyB0aGUgbW9uZXkgdmFsdWUncyBjdXJyZW5jeUNvZGVcbiAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSkoKTtcblxuICBjb25zdCBpc0hpZ2hQcmVjaXNpb24gPVxuICAgICFNb25leUlucHV0LmlzRW1wdHkocHJvcHMudmFsdWUpICYmXG4gICAgTW9uZXlJbnB1dC5pc0hpZ2hQcmVjaXNpb24ocHJvcHMudmFsdWUsIGludGwubG9jYWxlKTtcblxuICBjb25zdCB7IG9uQmx1ciB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckJsdXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhhdCBib3RoIGZpZWxkcyBhcmUgbWFya2VkIGFzIHRvdWNoZWQgd2hlbiBvbmUgb2YgdGhlbVxuICAgICAgLy8gaXMgYmx1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFjb250YWluZXJSZWYuY3VycmVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldClcbiAgICAgICkge1xuICAgICAgICBvbkJsdXIoe1xuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkJsdXIsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV1cbiAgKTtcblxuICBjb25zdCBUb29sdGlwUG9ydGFsID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlbWFpbmluZ1Byb3BzKSA9PiA8UG9ydGFsIHsuLi5yZW1haW5pbmdQcm9wc30gaWQ9e3Byb3BzLmlkfSAvPixcbiAgICBbcHJvcHMuaWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29uc3RyYWludHMuSG9yaXpvbnRhbCBtYXg9e2hvcml6b250YWxDb25zdHJhaW50fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBgfVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbmV5LWlucHV0LWNvbnRhaW5lclwiXG4gICAgICAgIG9uQmx1cj17aGFuZGxlQ29udGFpbmVyQmx1cn1cbiAgICAgID5cbiAgICAgICAge2hhc05vQ3VycmVuY2llcyA/IChcbiAgICAgICAgICA8Q3VycmVuY3lMYWJlbFxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlzQ29uZGVuc2VkPXtwcm9wcy5pc0NvbmRlbnNlZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1JlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb24gJiYgb3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvQ3VycmVuY3lMYWJlbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpbnB1dElkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgbmFtZT17Z2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17b3B0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQgfHwgcHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBjb21wb25lbnRzPXtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlOiAoaW5uZXJQcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNpbmdsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgICAgICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBJbnB1dDogKG93blByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5JbnB1dCB7Li4ub3duUHJvcHN9IHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRHJvcGRvd25JbmRpY2F0b3I6IHByb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3RTZWxlY3RQcm9wc1snY29tcG9uZW50cyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgbWVudUlzT3Blbj17cHJvcHMuaXNSZWFkT25seSA/IGZhbHNlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgc3R5bGVzPXtjdXJyZW5jeVNlbGVjdFN0eWxlcyBhcyBSZWFjdFNlbGVjdFByb3BzWydzdHlsZXMnXX1cbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUN1cnJlbmN5Rm9jdXN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtwcm9wcy5tZW51UG9ydGFsVGFyZ2V0fVxuICAgICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPXtwcm9wcy5tZW51U2hvdWxkQmxvY2tTY3JvbGx9XG4gICAgICAgICAgICBtZW51UGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUN1cnJlbmN5Qmx1cn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDdXJyZW5jeUNoYW5nZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY3VycmVuY3ktZHJvcGRvd25cIlxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGB9XG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17YW1vdW50SW5wdXRSZWZ9XG4gICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9e3Byb3BzLmF1dG9Db21wbGV0ZX1cbiAgICAgICAgICAgIG5hbWU9e2dldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUFtb3VudEZvY3VzfVxuICAgICAgICAgICAgdmFsdWU9e3Byb3BzLnZhbHVlLmFtb3VudH1cbiAgICAgICAgICAgIGNzcz17W1xuICAgICAgICAgICAgICBnZXRBbW91bnRJbnB1dFN0eWxlcyh7IC4uLnByb3BzLCBoYXNGb2N1cyB9KSxcbiAgICAgICAgICAgICAgLy8gYWNjb3VudHMgZm9yIHNpemUgb2YgaWNvblxuICAgICAgICAgICAgICBwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiZcbiAgICAgICAgICAgICAgICBpc0hpZ2hQcmVjaXNpb24gJiZcbiAgICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAke2Rlc2lnblRva2Vucy5zcGFjaW5nNDB9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgIGN1cnJlbmN5SGFzRm9jdXMgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNEaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICFwcm9wcy5pc1JlYWRPbmx5ICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR7ZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRm9jdXNlZH07XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQW1vdW50Q2hhbmdlfVxuICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVBbW91bnRCbHVyfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICByZWFkT25seT17cHJvcHMuaXNSZWFkT25seX1cbiAgICAgICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuaXNBdXRvZm9jdXNzZWR9XG4gICAgICAgICAgICB7Li4uZmlsdGVyRGF0YUF0dHJpYnV0ZXMoe1xuICAgICAgICAgICAgICBob3Jpem9udGFsQ29uc3RyYWludCxcbiAgICAgICAgICAgICAgbWVudVBvcnRhbFpJbmRleCxcbiAgICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8qIEFSSUEgKi9cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17cHJvcHNbJ2FyaWEtaW52YWxpZCddfVxuICAgICAgICAgICAgYXJpYS1lcnJvcm1lc3NhZ2U9e3Byb3BzWydhcmlhLWVycm9ybWVzc2FnZSddfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge3Byb3BzLmhhc0hpZ2hQcmVjaXNpb25CYWRnZSAmJiBpc0hpZ2hQcmVjaXNpb24gJiYgKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgeyFwcm9wcy5pc0Rpc2FibGVkICYmIDxkaXYgaWQ9e2dldFBvcnRhbElkKHByb3BzLmlkKX0gLz59XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjc3M9eygpID0+XG4gICAgICAgICAgICAgICAgICBnZXRIaWdoUHJlY2lzaW9uV3JhcHBlclN0eWxlcyh7XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICBvZmY9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3AtZW5kXCJcbiAgICAgICAgICAgICAgICAgIC8vIHdlIHVzZSBuZWdhdGl2ZSBtYXJnaW4gdG8gbWFrZSB1cCBmb3IgdGhlIHBhZGRpbmcgaW4gdGhlIFRvb2x0aXAgV3JhcHBlclxuICAgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgdG9vbHRpcCBpcyBmbHVzaCB3aXRoIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIHN0eWxlcz17e1xuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBgJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAtJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzEwfSAke2Rlc2lnblRva2Vucy5zcGFjaW5nMjB9IDBgLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaGlnaFByZWNpc2lvbil9XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgICAgICAgICAgICAgIFRvb2x0aXBXcmFwcGVyQ29tcG9uZW50OiBUb29sdGlwUG9ydGFsLFxuICAgICAgICAgICAgICAgICAgICBXcmFwcGVyQ29tcG9uZW50OiBUb29sdGlwV3JhcHBlcixcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEZyYWN0aW9uRGlnaXRzSWNvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuaXNEaXNhYmxlZCA/ICduZXV0cmFsNjAnIDogJ2luZm8nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnN0cmFpbnRzLkhvcml6b250YWw+XG4gICk7XG59O1xuXG5Nb25leUlucHV0LmRpc3BsYXlOYW1lID0gJ01vbmV5SW5wdXQnO1xuXG5Nb25leUlucHV0LmdldEFtb3VudElucHV0SWQgPSBnZXRBbW91bnRJbnB1dE5hbWU7XG5cbk1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkID0gZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWU7XG5cbk1vbmV5SW5wdXQuY29udmVydFRvTW9uZXlWYWx1ZSA9ICh2YWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZykgPT5cbiAgY3JlYXRlTW9uZXlWYWx1ZShcbiAgICB0eXBlb2YgdmFsdWUuYW1vdW50ID09PSAnc3RyaW5nJyA/IHZhbHVlLmFtb3VudC50cmltKCkgOiAnJyxcbiAgICBsb2NhbGUsXG4gICAgdmFsdWUuY3VycmVuY3lDb2RlXG4gICk7XG5cbk1vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlID0gKFxuICBtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSxcbiAgbG9jYWxlOiBzdHJpbmdcbik6IFRWYWx1ZSA9PiB7XG4gIGlmICghbW9uZXlWYWx1ZSkgcmV0dXJuIHsgY3VycmVuY3lDb2RlOiAnJywgYW1vdW50OiAnJyB9O1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBBIGxvY2FsZSBtdXN0IGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50J1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIG1vbmV5VmFsdWUgPT09ICdvYmplY3QnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBiZSBwYXNzZWQgYXMgYW4gb2JqZWN0IG9yIGJlIHVuZGVmaW5lZCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJjdXJyZW5jeUNvZGVcIidcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIGhhcyhhbGxDdXJyZW5jaWVzLCBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IHVzZSBrbm93biBjdXJyZW5jeSBjb2RlJ1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgLy8gaGlnaFByZWNpc2lvbiBvciBjZW50UHJlY2lzaW9uIHZhbHVlcyBtdXN0IGJlIHNldFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmNlbnRBbW91bnQgPT09ICdudW1iZXInIHx8XG4gICAgICAodHlwZW9mIG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHMgPT09ICdudW1iZXInKSxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgY29udGFpbiBcImFtb3VudFwiJ1xuICApO1xuXG4gIGNvbnN0IGFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzLFxuICAgIH0pLFxuICAgIGxvY2FsZSxcbiAgICBtb25leVZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG4gIHJldHVybiB7IGFtb3VudCwgY3VycmVuY3lDb2RlOiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSB9O1xufTtcblxuTW9uZXlJbnB1dC5pc0VtcHR5ID0gKGZvcm1WYWx1ZTogVFZhbHVlKSA9PlxuICAhZm9ybVZhbHVlIHx8XG4gIGZvcm1WYWx1ZS5hbW91bnQudHJpbSgpID09PSAnJyB8fFxuICBmb3JtVmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSA9PT0gJyc7XG5cbk1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uID0gKGZvcm1WYWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB3YXJuaW5nKFxuICAgICFNb25leUlucHV0LmlzRW1wdHkoZm9ybVZhbHVlKSxcbiAgICAnTW9uZXlWYWx1ZS5pc0hpZ2hQcmVjaXNpb24gbWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBtb25leSB2YWx1ZS4nXG4gICk7XG4gIGNvbnN0IG1vbmV5VmFsdWUgPSBNb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUoZm9ybVZhbHVlLCBsb2NhbGUpO1xuICByZXR1cm4gbW9uZXlWYWx1ZT8udHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nO1xufTtcblxudHlwZSBUVG91Y2hlZCA9IHtcbiAgYW1vdW50PzogYm9vbGVhbjtcbiAgY3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbn07XG5cbk1vbmV5SW5wdXQuaXNUb3VjaGVkID0gKHRvdWNoZWQ/OiBUVG91Y2hlZCkgPT5cbiAgQm9vbGVhbih0b3VjaGVkICYmIHRvdWNoZWQuY3VycmVuY3lDb2RlICYmIHRvdWNoZWQuYW1vdW50KTtcblxuZXhwb3J0IGRlZmF1bHQgTW9uZXlJbnB1dDtcbiJdfQ== */"],
1293
+ props.hasHighPrecisionBadge && isHighPrecision && /*#__PURE__*/react.css("padding-right:", designSystem.designTokens.spacing40, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:MoneyInput;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtMkJtQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBDb21wb25lbnRUeXBlLFxuICB0eXBlIENoYW5nZUV2ZW50LFxuICB0eXBlIEZvY3VzRXZlbnQsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCwgeyB0eXBlIFRUb29sdGlwUHJvcHMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50IHwgRm9jdXNFdmVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyaXNoKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlKSkge1xuICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogeyB2YWx1ZTogVEN1cnJlbmN5Q29kZSB9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb24udmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICE9PSBjdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIGZyb20gYSBjdXJyZW5jeSB3aXRoIDMgZnJhY3Rpb24gZGlnaXRzIHRvXG4gICAgICAgIC8vIGEgY3VycmVuY3kgd2l0aCAyIGZyYWN0aW9uIGRpZ2l0cywgYW5kIHdoZW4gdGhlIGlucHV0IHZhbHVlIHdhc1xuICAgICAgICAvLyBcIjkuMDAwXCIgKDkpLCB0aGVuIGl0IHNob3VsZCBjaGFuZ2UgdG8gXCI5LjAwXCIgdG8gcmVmbGVjdCB0aGUgbmV3XG4gICAgICAgIC8vIGN1cnJlbmN5J3MgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVuY3kgd2FzIGEgaGlnaC1wcmVjaXNpb24gcHJpY2UsIHRoZW4gbm8gZGlnaXRzIHNob3VsZFxuICAgICAgICAvLyBiZSBsb3N0XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgICBwcm9wcy52YWx1ZS5hbW91bnQudHJpbSgpLFxuICAgICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgdXNlciBjb3VsZCBiZSBjaGFuZ2luZyB0aGUgY3VycmVuY3kgYmVmb3JlIGVudGVyaW5nIGFueSBhbW91bnQsXG4gICAgICAgIC8vIG9yIHdoaWxlIHRoZSBhbW91bnQgaXMgaW52YWxpZC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRvbid0IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBhbW91bnQuXG4gICAgICAgIGNvbnN0IG5leHRBbW91bnQgPSBpc05hTihOdW1iZXIoZm9ybWF0dGVkQW1vdW50KSlcbiAgICAgICAgICA/IHByb3BzLnZhbHVlLmFtb3VudFxuICAgICAgICAgIDogZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICAgIC8vIGNoYW5nZSBjdXJyZW5jeSBjb2RlXG4gICAgICAgIGNvbnN0IGZha2VDdXJyZW5jeUV2ZW50ID0ge1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlQ3VycmVuY3lFdmVudCk7XG5cbiAgICAgICAgLy8gY2hhbmdlIGFtb3VudCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKHByb3BzLnZhbHVlLmFtb3VudCAhPT0gbmV4dEFtb3VudCkge1xuICAgICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0QW1vdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFtb3VudElucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBpbnRsLmxvY2FsZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbW9uZXlJbnB1dElkLFxuICAgICAgcHJvcHMubmFtZSxcbiAgICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICAgIHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyh0cnVlKTtcbiAgfSwgW29uRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMsIHByb3BzLm5hbWUsIG1vbmV5SW5wdXRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Qmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKGZhbHNlKTtcbiAgfSwgW3RvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdKTtcblxuICBjb25zdCBoYXNOb0N1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgaGFzRm9jdXMgPSBjdXJyZW5jeUhhc0ZvY3VzIHx8IGFtb3VudEhhc0ZvY3VzO1xuICBjb25zdCBjdXJyZW5jeVNlbGVjdFN0eWxlcyA9IGNyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nOiBwcm9wcy5oYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yOiBwcm9wcy5oYXNFcnJvcixcbiAgICBpc0NvbmRlbnNlZDogcHJvcHMuaXNDb25kZW5zZWQsXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1JlYWRPbmx5OiBwcm9wcy5pc1JlYWRPbmx5LFxuICAgIG1lbnVQb3J0YWxaSW5kZXg6IG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgY3VycmVuY3lIYXNGb2N1cyxcbiAgfSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGxhYmVsOiBjdXJyZW5jeUNvZGUsXG4gICAgdmFsdWU6IGN1cnJlbmN5Q29kZSxcbiAgfSkpO1xuXG4gIGNvbnN0IG9wdGlvbiA9ICgoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb25DYW5kaWRhdGUpID0+IG9wdGlvbkNhbmRpZGF0ZS52YWx1ZSA9PT0gcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgLy8gZW5zdXJlIGFuIG9wdGlvbiBpcyBmb3VuZCwgZXZlbiB3aGVuIHRoZSBjdXJyZW5jaWVzIGRvbid0IGluY2x1ZGVcbiAgICAvLyB0aGUgbW9uZXkgdmFsdWUncyBjdXJyZW5jeUNvZGVcbiAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSkoKTtcblxuICBjb25zdCBpc0hpZ2hQcmVjaXNpb24gPVxuICAgICFNb25leUlucHV0LmlzRW1wdHkocHJvcHMudmFsdWUpICYmXG4gICAgTW9uZXlJbnB1dC5pc0hpZ2hQcmVjaXNpb24ocHJvcHMudmFsdWUsIGludGwubG9jYWxlKTtcblxuICBjb25zdCB7IG9uQmx1ciB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckJsdXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhhdCBib3RoIGZpZWxkcyBhcmUgbWFya2VkIGFzIHRvdWNoZWQgd2hlbiBvbmUgb2YgdGhlbVxuICAgICAgLy8gaXMgYmx1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFjb250YWluZXJSZWYuY3VycmVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKVxuICAgICAgKSB7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBvbkJsdXIoe1xuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQmx1ciwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IFRvb2x0aXBQb3J0YWwgPSB1c2VDYWxsYmFjayhcbiAgICAocmVtYWluaW5nUHJvcHM6IFRUb29sdGlwUHJvcHMgJiB7IGlkOiBzdHJpbmcgfSkgPT4gKFxuICAgICAgPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZCF9IC8+XG4gICAgKSxcbiAgICBbcHJvcHMuaWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29uc3RyYWludHMuSG9yaXpvbnRhbCBtYXg9e2hvcml6b250YWxDb25zdHJhaW50fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBgfVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbmV5LWlucHV0LWNvbnRhaW5lclwiXG4gICAgICAgIG9uQmx1cj17KGV2ZW50KSA9PlxuICAgICAgICAgIGhhbmRsZUNvbnRhaW5lckJsdXIoZXZlbnQgYXMgRm9jdXNFdmVudDxIVE1MRGl2RWxlbWVudD4pXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2hhc05vQ3VycmVuY2llcyA/IChcbiAgICAgICAgICA8Q3VycmVuY3lMYWJlbFxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlzQ29uZGVuc2VkPXtwcm9wcy5pc0NvbmRlbnNlZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1JlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb24gJiYgb3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvQ3VycmVuY3lMYWJlbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpbnB1dElkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgbmFtZT17Z2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17b3B0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQgfHwgcHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBjb21wb25lbnRzPXtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlOiAoaW5uZXJQcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNpbmdsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgICAgICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBJbnB1dDogKG93blByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5JbnB1dCB7Li4ub3duUHJvcHN9IHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRHJvcGRvd25JbmRpY2F0b3I6IHByb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3RTZWxlY3RQcm9wc1snY29tcG9uZW50cyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgbWVudUlzT3Blbj17cHJvcHMuaXNSZWFkT25seSA/IGZhbHNlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgc3R5bGVzPXtjdXJyZW5jeVNlbGVjdFN0eWxlcyBhcyBSZWFjdFNlbGVjdFByb3BzWydzdHlsZXMnXX1cbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUN1cnJlbmN5Rm9jdXN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtwcm9wcy5tZW51UG9ydGFsVGFyZ2V0fVxuICAgICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPXtwcm9wcy5tZW51U2hvdWxkQmxvY2tTY3JvbGx9XG4gICAgICAgICAgICBtZW51UGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUN1cnJlbmN5Qmx1cn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDdXJyZW5jeUNoYW5nZSBhcyBSZWFjdFNlbGVjdFByb3BzWydvbkNoYW5nZSddfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjdXJyZW5jeS1kcm9wZG93blwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXthbW91bnRJbnB1dFJlZn1cbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT17cHJvcHMuYXV0b0NvbXBsZXRlfVxuICAgICAgICAgICAgbmFtZT17Z2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlQW1vdW50Rm9jdXN9XG4gICAgICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWUuYW1vdW50fVxuICAgICAgICAgICAgY3NzPXtbXG4gICAgICAgICAgICAgIGdldEFtb3VudElucHV0U3R5bGVzKHsgLi4ucHJvcHMsIGhhc0ZvY3VzIH0pLFxuICAgICAgICAgICAgICAvLyBhY2NvdW50cyBmb3Igc2l6ZSBvZiBpY29uXG4gICAgICAgICAgICAgIHByb3BzLmhhc0hpZ2hQcmVjaXNpb25CYWRnZSAmJlxuICAgICAgICAgICAgICAgIGlzSGlnaFByZWNpc2lvbiAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmc0MH07XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgY3VycmVuY3lIYXNGb2N1cyAmJlxuICAgICAgICAgICAgICAgICFwcm9wcy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzUmVhZE9ubHkgJiZcbiAgICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5Gb2N1c2VkfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBbW91bnRDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUFtb3VudEJsdXJ9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5pc0F1dG9mb2N1c3NlZH1cbiAgICAgICAgICAgIHsuLi5maWx0ZXJEYXRhQXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgIGhvcml6b250YWxDb25zdHJhaW50LFxuICAgICAgICAgICAgICBtZW51UG9ydGFsWkluZGV4LFxuICAgICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLyogQVJJQSAqL1xuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXtwcm9wc1snYXJpYS1pbnZhbGlkJ119XG4gICAgICAgICAgICBhcmlhLWVycm9ybWVzc2FnZT17cHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ119XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7cHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmIGlzSGlnaFByZWNpc2lvbiAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7IXByb3BzLmlzRGlzYWJsZWQgJiYgPGRpdiBpZD17Z2V0UG9ydGFsSWQocHJvcHMuaWQpfSAvPn1cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIGdldEhpZ2hQcmVjaXNpb25XcmFwcGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgIG9mZj17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcC1lbmRcIlxuICAgICAgICAgICAgICAgICAgLy8gd2UgdXNlIG5lZ2F0aXZlIG1hcmdpbiB0byBtYWtlIHVwIGZvciB0aGUgcGFkZGluZyBpbiB0aGUgVG9vbHRpcCBXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0b29sdGlwIGlzIGZsdXNoIHdpdGggdGhlIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgc3R5bGVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IGAke2Rlc2lnblRva2Vucy5zcGFjaW5nMjB9IC0ke2Rlc2lnblRva2Vucy5zcGFjaW5nMTB9ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gMGAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5oaWdoUHJlY2lzaW9uKX1cbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICAgICAgVG9vbHRpcFdyYXBwZXJDb21wb25lbnQ6IFRvb2x0aXBQb3J0YWwgYXMgQ29tcG9uZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */"), currencyHasFocus && !props.isDisabled && !props.isReadOnly && /*#__PURE__*/react.css("border-left-color:", designSystem.designTokens.borderColorForInputWhenFocused, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:MoneyInput;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5MkJtQiIsImZpbGUiOiJtb25leS1pbnB1dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgdHlwZSBDb21wb25lbnRUeXBlLFxuICB0eXBlIENoYW5nZUV2ZW50LFxuICB0eXBlIEZvY3VzRXZlbnQsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBTZWxlY3QsIHtcbiAgY29tcG9uZW50cyxcbiAgdHlwZSBTaW5nbGVWYWx1ZVByb3BzLFxuICB0eXBlIFByb3BzIGFzIFJlYWN0U2VsZWN0UHJvcHMsXG59IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgeyB1c2VJbnRsIH0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgeyBjc3MsIHR5cGUgVGhlbWUgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBkZXNpZ25Ub2tlbnMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7XG4gIHdhcm5pbmcsXG4gIGlzTnVtYmVyaXNoLFxuICBmaWx0ZXJEYXRhQXR0cmlidXRlcyxcbiAgY3JlYXRlU2VxdWVudGlhbElkLFxufSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC91dGlscyc7XG5pbXBvcnQgVG9vbHRpcCwgeyB0eXBlIFRUb29sdGlwUHJvcHMgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC90b29sdGlwJztcbmltcG9ydCB7XG4gIERyb3Bkb3duSW5kaWNhdG9yLFxuICBjcmVhdGVTZWxlY3RTdHlsZXMsXG4gIHdhcm5JZk1lbnVQb3J0YWxQcm9wc0FyZU1pc3NpbmcsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3NlbGVjdC11dGlscyc7XG5pbXBvcnQgeyBGcmFjdGlvbkRpZ2l0c0ljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgQ29uc3RyYWludHMgZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvY29uc3RyYWludHMnO1xuaW1wb3J0IHsgdXNlRmllbGRJZCwgdXNlVG9nZ2xlU3RhdGUgfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9ob29rcyc7XG5pbXBvcnQgYWxsQ3VycmVuY2llcyBmcm9tICcuL2N1cnJlbmNpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMsXG4gIGdldEN1cnJlbmN5TGFiZWxTdHlsZXMsXG4gIGdldEFtb3VudElucHV0U3R5bGVzLFxufSBmcm9tICcuL21vbmV5LWlucHV0LnN0eWxlcyc7XG5pbXBvcnQgbWVzc2FnZXMgZnJvbSAnLi9tZXNzYWdlcyc7XG5cbmNvbnN0IFRvb2x0aXBXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IG1vbmV5SW5wdXRTZXF1ZW50aWFsSWQgPSBjcmVhdGVTZXF1ZW50aWFsSWQoJ21vbmV5LWlucHV0LScpO1xuXG5jb25zdCBnZXRQb3J0YWxJZCA9IChpZD86IHN0cmluZykgPT4gYHBvcnRhbC0ke2lkfWA7XG5jb25zdCBnZXRQb3J0YWxOb2RlID0gKGlkPzogc3RyaW5nKSA9PlxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtnZXRQb3J0YWxJZChpZCl9YCk7XG5cbnR5cGUgVExhYmVsID0ge1xuICBpZDogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQb3J0YWwgPSAocHJvcHM6IFRMYWJlbCkgPT4ge1xuICBjb25zdCBkb21Ob2RlID0gZ2V0UG9ydGFsTm9kZShwcm9wcy5pZCk7XG4gIGlmIChkb21Ob2RlKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChwcm9wcy5jaGlsZHJlbiwgZG9tTm9kZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBDdXJyZW5jeUxhYmVsID0gKHByb3BzOiBUTGFiZWwpID0+IChcbiAgPGxhYmVsIGh0bWxGb3I9e3Byb3BzLmlkfSBjc3M9e2dldEN1cnJlbmN5TGFiZWxTdHlsZXMocHJvcHMpfT5cbiAgICB7cHJvcHMuY2hpbGRyZW59XG4gIDwvbGFiZWw+XG4pO1xuXG5DdXJyZW5jeUxhYmVsLmRpc3BsYXlOYW1lID0gJ0N1cnJlbmN5TGFiZWwnO1xuXG50eXBlIFRTaW5nbGVWYWx1ZSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufSAmIFNpbmdsZVZhbHVlUHJvcHM7XG5cbmNvbnN0IFNpbmdsZVZhbHVlID0gKHsgaWQsIC4uLnByb3BzIH06IFRTaW5nbGVWYWx1ZSkgPT4gKFxuICA8Y29tcG9uZW50cy5TaW5nbGVWYWx1ZSB7Li4ucHJvcHN9PlxuICAgIDxsYWJlbCBodG1sRm9yPXtpZH0+e3Byb3BzLmNoaWxkcmVufTwvbGFiZWw+XG4gIDwvY29tcG9uZW50cy5TaW5nbGVWYWx1ZT5cbik7XG5cblNpbmdsZVZhbHVlLmRpc3BsYXlOYW1lID0gJ1NpbmdsZVZhbHVlJztcblxudHlwZSBUQ3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMgPSAoXG4gIGlucHV0OiBUSW5wdXRQcm9wcyAmIHtcbiAgICBjdXJyZW5jeUhhc0ZvY3VzPzogYm9vbGVhbjtcbiAgfVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBUSW5wdXRQcm9wcyA9IHtcbiAgaXNDb25kZW5zZWQ/OiBib29sZWFuO1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgaXNSZWFkT25seT86IGJvb2xlYW47XG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxudHlwZSBUQmFzZSA9IHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn07XG4vLyBvdmVyd3JpdGUgc3R5bGVzIG9mIGNyZWF0ZVNlbGVjdFN0eWxlc1xuY29uc3QgY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXM6IFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9ICh7XG4gIGhhc1dhcm5pbmcsXG4gIGhhc0Vycm9yLFxuICBpc0NvbmRlbnNlZCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNSZWFkT25seSxcbiAgbWVudVBvcnRhbFpJbmRleCxcbiAgY3VycmVuY3lIYXNGb2N1cyxcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0U3R5bGVzID0gY3JlYXRlU2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yLFxuICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgaXNDb25kZW5zZWQsXG4gICAgaXNSZWFkT25seSxcbiAgICBpc0Rpc2FibGVkLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zZWxlY3RTdHlsZXMsXG4gICAgY29udHJvbDogKGJhc2U6IFRCYXNlLCBzdGF0ZTogUmVhY3RTZWxlY3RQcm9wcykgPT4gKHtcbiAgICAgIC4uLnNlbGVjdFN0eWxlcy5jb250cm9sKGJhc2UsIHN0YXRlKSxcbiAgICAgIHBhZGRpbmc6IGAwICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyNX1gLFxuICAgICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiAnMCcsXG4gICAgICBib3JkZXJSaWdodDogJzAnLFxuICAgICAgbWluV2lkdGg6ICc4MHB4JyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYm9yZGVyQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZH0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KVxuICAgICAgICAgIHJldHVybiBgJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5SZWFkb25seX0gIWltcG9ydGFudGA7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbldhcm5pbmc7XG4gICAgICAgIGlmIChjdXJyZW5jeUhhc0ZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0O1xuICAgICAgfSkoKSxcbiAgICAgIGN1cnNvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiAnbm90LWFsbG93ZWQnO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGBkZWZhdWx0YDtcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICAgIH0pKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlblJlYWRvbmx5O1xuICAgICAgICByZXR1cm4gYmFzZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9KSgpLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dCxcbiAgICAgIH0sXG4gICAgICAnJjpob3Zlcjpub3QoOnJlYWQtb25seSk6bm90KDpkaXNhYmxlZCknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZGVzaWduVG9rZW5zLmJhY2tncm91bmRDb2xvckZvcklucHV0V2hlbkhvdmVyZWQsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHNpbmdsZVZhbHVlOiAoYmFzZTogVEJhc2UpID0+ICh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgIG1heFdpZHRoOiAnaW5pdGlhbCcsXG4gICAgICBjb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuRGlzYWJsZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5FcnJvcjtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmcpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmNvbG9yO1xuICAgICAgfSkoKSxcbiAgICB9KSxcbiAgICBkcm9wZG93bkluZGljYXRvcjogKCkgPT4gKHtcbiAgICAgIGZpbGw6IGlzUmVhZE9ubHlcbiAgICAgICAgPyBkZXNpZ25Ub2tlbnMuZm9udENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHlcbiAgICAgICAgOiBkZXNpZ25Ub2tlbnMuY29sb3JOZXV0cmFsNDAsXG4gICAgfSksXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VycmVuY3lDb2RlID0ga2V5b2YgdHlwZW9mIGFsbEN1cnJlbmNpZXM7XG5cbnR5cGUgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcyA9XG4gIHwgeyB0eXBlOiAnaGlnaFByZWNpc2lvbic7IHByZWNpc2VBbW91bnQ6IG51bWJlciB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBVc3VhbGx5IGVpdGhlciBhIGBjZW50UHJlY2lzaW9uYCBvciBhIGBoaWdoUHJlY2lzaW9uYC5cbiAgICAgICAqL1xuICAgICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nO1xuICAgICAgcHJlY2lzZUFtb3VudD86IG5ldmVyO1xuICAgIH07XG5leHBvcnQgdHlwZSBUTW9uZXlWYWx1ZSA9IHtcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlO1xuICBjZW50QW1vdW50OiBudW1iZXI7XG4gIGZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG59ICYgVE1vbmV5Q29uZGl0aW9uYWxQcm9wcztcbi8vIFRoZSBNb25leUlucHV0IGNvbXBvbmVudCBhbHdheXMgb3BlcmF0ZXMgb24gYSB2YWx1ZSBjb25zaXN0aW5nIG9mOlxuLy8gYGBgXG4vLyB7IGFtb3VudDogU3RyaW5nLCBjdXJyZW5jeUNvZGU6IFN0cmluZyB9XG4vLyBgYGBcbi8vXG4vLyBUaGUgYW1vdW50IG1heSBvbmx5IHVzZSBhIGRvdCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4vLyBUaGUgYGN1cnJlbmN5Q29kZWAgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIEFQSS5cbi8vXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGRvZXMgbm90IGRvIGFueSB2YWxpZGF0aW9uIG9uIGl0cyBvd24uIEl0IG9ubHkgc2VydmVzIGFzIGEgd2F5XG4vLyB0byBnZXQgdGhlIGFtb3VudCBhbmQgYGN1cnJlbmN5Q29kZWAgaW5wdXQgZnJvbSB0aGUgdXNlci4gVmFsaWRhdGlvbiBpcyBhbHdheXNcbi8vIHVwIHRvIHRoZSBwYXJlbnQuXG4vL1xuLy8gVGhlIENUUCBBUEkgc3VwcG9ydHMgdHdvIHR5cGVzIG9mIHByaWNlczogYGNlbnRQcmVjaXNpb25gIGFuZCBgaGlnaFByZWNpc2lvbmAuXG4vLyBUaGUgYE1vbmV5SW5wdXRgIGl0c2VsZiBkb2VzIG5vdCBrbm93IGFib3V0IHRoZXNlLiBIb3dldmVyLFxuLy8gaXQgaGFzIHR3byBzdGF0aWMgbWV0aG9kcyBkZWZpbmVkIChgY29udmVydFRvTW9uZXlWYWx1ZWAgYW5kIGBwYXJzZU1vbmV5VmFsdWVgKSxcbi8vIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBgTW9uZXlJbnB1dGAgdmFsdWUgYW5kIHRoZSBgTW9uZXlWYWx1ZWBcbi8vIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy8gU29tZSBwbGFjZXMgaW4gdGhlIEFQSSBkbyBub3Qgc3VwcG9ydCBgaGlnaFByZWNpc2lvbmAgcHJpY2VzLCBidXQgdGhlXG4vLyBgY29udmVydFRvTW9uZXlWYWx1ZSBgd2lsbCBhbHdheXMgcmV0dXJuIGVpdGhlciBhIGBjZW50UHJlY2lzaW9uIGBvciBhXG4vLyBgaGlnaFByZWNpc2lvbmAgcHJpY2UuIEl0J3MgdXAgdGhlIGBNb25leUlucHV0YCdzIHBhcmVudCB0byBzaG93IGEgdmFsaWRhdGlvblxuLy8gZXJyb3IgaW4gY2FzZSBhIGBoaWdoUHJlY2lzaW9uYCBwcmljZSBpcyB1c2VkLlxuLy9cbi8vIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcyB0byBoYXZlIGBoaWdoUHJlY2lzaW9uYCB3aGVuIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWRcbi8vIGZyYWN0aW9uIGRpZ2l0cyBleGNlZWQgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMuIEZvclxuLy8gZXhhbXBsZSwgYEVVUiA0Mi4wMGAgaXMgYWx3YXlzIGEgYGNlbnRQcmVjaXNpb25gIHByaWNlLCB3aGlsZSBgRVVSIDQyLjAwMWAgaXMgYWx3YXlzIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYEVVUiA0Mi4wMGAgYXMgYSBgaGlnaFByZWNpc2lvbmBcbi8vIHByaWNlLlxuLy9cbi8vIFRoZSBmaXJzdCB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycywgd2Ugd2FudCB0byB0cnkgdG8gc2hvdyB0aGUgYGNlbnRBbW91bnRgXG4vLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIuIFRvIGFjaGlldmUgdGhpcywgdGhlIGBwYXJzZU1vbmV5VmFsdWVgIGZ1bmN0aW9uIGNhblxuLy8gYmUgdXNlZCB0byB0dXJuIHRoZSBBUEkgdmFsdWUgaW50byBhIHZhbHVlIHRoZSBgTW9uZXlJbnB1dGAgdW5kZXJzdGFuZHMuXG4vLyBEdXJpbmcgdGhpcyB0cmFuc2Zvcm1hdGlvbiwgdGhlIG1vbmV5IHZhbHVlIHdpbGwgZ2V0IGZvcm1hdHRlZCBpbnRvIFwiYW1vdW50XCIuXG4vL1xuLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSwgd2UgZG9uJ3Qgd2FudCB0byBmb3JtYXQgYWdhaW4uIFdlIG9ubHkgZm9ybWF0XG4vLyBpbiBjYXNlIHRoZSB1c2VyIGJsdXJzIHRoZSBmaWVsZC4gVGhpcyBhdm9pZHMgbWFueSBlZGdlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZm9ybWF0dGluZyB3b3VsZCBtZXNzIHdpdGggdGhlIHVzZXIncyBpbnB1dC5cbi8vXG4vL1xuLy8gQSBmdWxsIGV4YW1wbGUgb2YgYW4gYE1vbmV5VmFsdWVgIHdpdGggYGNlbnRQcmVjaXNpb25gIHdvdWxkIGJlXG4vLyBgYGBcbi8vIHtcbi8vICAgXCJ0eXBlXCI6IFwiY2VudFByZWNpc2lvblwiLFxuLy8gICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gICBcImNlbnRBbW91bnRcIjogNDIwMCxcbi8vICAgXCJmcmFjdGlvbkRpZ2l0c1wiOiAyXG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDQyLjAwYC5cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgaGlnaFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gIFwidHlwZVwiOiBcImhpZ2hQcmVjaXNpb25cIixcbi8vICBcImN1cnJlbmN5Q29kZVwiOiBcIkVVUlwiLFxuLy8gIFwiY2VudEFtb3VudFwiOiAxLFxuLy8gIFwicHJlY2lzZUFtb3VudFwiOiAxMjM0NTYsXG4vLyAgXCJmcmFjdGlvbkRpZ2l0c1wiOiA3XG4vLyB9XG4vLyBgYGBcbi8vIHdoaWNoIGVxdWFscyBgRVVSIDAuMDEyMzQ1NmBcblxuLy8gUGFyc2luZ1xuLy8gU2luY2UgbW9zdCB1c2VycyBhcmUgbm90IGNhcmVmdWwgYWJvdXQgaG93IHRoZXkgZW50ZXIgdmFsdWVzLCB3ZSB3aWxsIHBhcnNlXG4vLyBib3RoIGAuYCBhbmQgYCxgIGFzIGRlY2ltYWwgc2VwYXJhdG9ycy5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMS4wMDAsMDBgIHdlIHBhcnNlIGl0IGFzIGAxMDAwYC5cbi8vIFdoZW4gYSB2YWx1ZSBpcyBgMSwwMDAuMDBgIHdlIGFsc28gcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy9cbi8vIFRoaXMgbWVhbnMgdGhlIGhpZ2hlc3QgYW1vdW50IGFsd2F5cyB3aW5zLiBXZSBkbyB0aGlzIGJ5IGNvbXBhcmluZyB0aGUgbGFzdFxuLy8gcG9zaXRpb24gb2YgYC5gIGFuZCBgLGAuIFdoYXRldmVyIG9jY3VycyBsYXRlciBpcyB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbmV4cG9ydCBjb25zdCBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyID0gKHJhd0Ftb3VudDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZykgPT4ge1xuICBsZXQgZnJhY3Rpb25zU2VwYXJhdG9yO1xuXG4gIGlmIChsb2NhbGUpIHtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSAoMi41KSAvLyB3ZSBuZWVkIGFueSBudW1iZXIgd2l0aCBmcmFjdGlvbnMsIHNvIHRoYXQgd2Uga25vdyB3aGF0IGlzIHRoZSBmcmFjdGlvblxuICAgICAgLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgLy8gXCJzeW1ib2xcIiBmb3IgdGhlIHByb3ZpZGVkIGxvY2FsZVxuICAgICAgLnJlcGxhY2UoL1xcZC9nLCAnJyk7IC8vIHRoZW4gd2UgcmVtb3ZlIHRoZSBudW1iZXJzIGFuZCBrZWVwIHRoZSBcInN5bWJvbFwiXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERvdCA9IFN0cmluZyhyYXdBbW91bnQpLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgbGFzdENvbW1hID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJywnKTtcbiAgICBmcmFjdGlvbnNTZXBhcmF0b3IgPSBsYXN0Q29tbWEgPiBsYXN0RG90ID8gJywnIDogJy4nO1xuICB9XG4gIGZyYWN0aW9uc1NlcGFyYXRvciA9IGZyYWN0aW9uc1NlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IGZyYWN0aW9uc1NlcGFyYXRvcjsgLy8gaGVyZSB3ZSBlc2NhcGUgdGhlICcuJyB0byB1c2UgaXQgYXMgcmVnZXhcbiAgLy8gVGhlIHJhdyBhbW91bnQgd2l0aCBvbmx5IG9uZSBzcGFyYXRvclxuICBjb25zdCBub3JtYWxpemVkQW1vdW50ID0gU3RyaW5nKHJhd0Ftb3VudClcbiAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbXi0wLTkke2ZyYWN0aW9uc1NlcGFyYXRvcn1dYCwgJ2cnKSwgJycpIC8vIHdlIGp1c3Qga2VlcCB0aGUgbnVtYmVycyBhbmQgdGhlIGZyYWN0aW9uIHN5bWJvbFxuICAgIC5yZXBsYWNlKGZyYWN0aW9uc1NlcGFyYXRvciwgJy4nKTsgLy8gdGhlbiB3ZSBjaGFuZ2Ugd2hhdGV2ZXIgYGZyYWN0aW9uc1NlcGFyYXRvcmAgd2FzIHRvIGAuYCBzbyB3ZSBjYW4gcGFyc2UgaXQgYXMgZmxvYXRcblxuICByZXR1cm4gcGFyc2VGbG9hdChub3JtYWxpemVkQW1vdW50KTtcbn07XG5cbi8vIFR1cm5zIHRoZSB1c2VyIGlucHV0IGludG8gYSB2YWx1ZSB0aGUgTW9uZXlJbnB1dCBjYW4gcGFzcyB1cCB0aHJvdWdoIG9uQ2hhbmdlXG4vLyBJbiBjYXNlIHRoZSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIGNvbnRhaW5lZCBpbiBcImFtb3VudFwiIGV4Y2VlZHMgdGhlXG4vLyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRoZSBjdXJyZW5jeSB1c2VzLCBpdCB3aWxsIGVtaXQgYSBwcmljZSBvZlxuLy8gdHlwZSBcImhpZ2hQcmVjaXNpb25cIiBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIFwiY2VudFByZWNpc2lvblwiLlxuLy8gSXQgd2lsbCByZXR1cm4gXCJudWxsXCIgaW4gY2FzZSBhbiBpbnZhbGlkIHZhbHVlIGlzIGVudGVyZWQuXG4vLyBUaGUgdmFsdWUgaXMgaW52YWxpZCB3aGVuXG4vLyAgLSBubyBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIGFuIGludmFsaWQgYW1vdW50IHdhcyBlbnRlcmVkXG4vLyAgLSBubyBjdXJyZW5jeSB3YXMgc2VsZWN0ZWRcbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIFwiYW1vdW50XCIgdG8gYmUgYSB0cmltbWVkIHZhbHVlLlxuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9uZXlWYWx1ZSA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU/OiBUQ3VycmVuY3lDb2RlIHwgJydcbik6IFRNb25leVZhbHVlIHwgbnVsbCA9PiB7XG4gIGlmICghY3VycmVuY3lDb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjdXJyZW5jeSA9IGFsbEN1cnJlbmNpZXNbY3VycmVuY3lDb2RlXTtcbiAgaWYgKCFjdXJyZW5jeSkgcmV0dXJuIG51bGw7XG4gIC8vIFRoZSB1c2VyIG1heSBlbnRlciBhIHZhbHVlIHdpdGggYSBjb21tYSwgZG90LCBvciBhcG9zdHJvcGhlIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgaWYgKHJhd0Ftb3VudC5sZW5ndGggPT09IDAgfHwgIWlzTnVtYmVyaXNoKHJhd0Ftb3VudCkpIHJldHVybiBudWxsO1xuXG4gIHdhcm5pbmcoXG4gICAgbG9jYWxlIHx8IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzICE9PSAwLFxuICAgIGBNb25leUlucHV0OiBBIGxvY2FsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY3VycmVuY3kgaGFzIG5vIGZyYWN0aW9uIGRpZ2l0cyAoJHtjdXJyZW5jeUNvZGV9KWBcbiAgKTtcbiAgY29uc3QgYW1vdW50QXNOdW1iZXIgPSBwYXJzZVJhd0Ftb3VudFRvTnVtYmVyKHJhd0Ftb3VudCwgbG9jYWxlKTtcbiAgaWYgKGlzTmFOKGFtb3VudEFzTnVtYmVyKSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVGhlIGNlbnQgYW1vdW50IGlzIHJvdW5kZWQgdG8gdGhlIGN1cnJlbmNpZSdzIGRlZmF1bHQgbnVtYmVyXG4gIC8vIG9mIGZyYWN0aW9uIGRpZ2l0cyBmb3IgcHJpY2VzIHdpdGggaGlnaCBwcmVjaXNpb24uXG4gIC8vXG4gIC8vIEFkZGl0aW9uYWxseSwgSmF2YVNjcmlwdCBpcyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gbXVsdGlwbHlpbmcgZmxvYXRzLFxuICAvLyAgIGUuZy4gMi40OSAqIDEwMCAtPiAyNDkuMDAwMDAwMDAwMDAwMDNcbiAgLy8gV2hpbGUgaW5hY2N1cmFjeSBmcm9tIG11bHRpcGx5aW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaXMgYVxuICAvLyBnZW5lcmFsIHByb2JsZW0gaW4gSlMsIHdlIGNhbiBhdm9pZCBpdCBieSBjdXR0aW5nIG9mZiBhbGxcbiAgLy8gZGVjaW1hbHMuIFRoaXMgaXMgcG9zc2libGUgc2luY2UgY2VudHMgaXMgdGhlIGJhc2UgdW5pdCwgc28gd2VcbiAgLy8gb3BlcmF0ZSBvbiBpbnRlZ2VycyBhbnl3YXlzXG4gIC8vIEFsc28gd2Ugc2hvdWxkIHRoZSByb3VuZCB0aGUgdmFsdWUgdG8gZW5zdXJlIHRoYXQgd2UgY29tZSBjbG9zZVxuICAvLyB0byB0aGUgbmVhcmVzdCBkZWNpbWFsIHZhbHVlXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2NvbW1lcmNldG9vbHMvbWVyY2hhbnQtY2VudGVyLWZyb250ZW5kL3B1bGwvNzcwXG4gIGNvbnN0IGNlbnRBbW91bnQgPSBNYXRoLnRydW5jKFxuICAgIE1hdGgucm91bmQoYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cylcbiAgKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0c09mQW1vdW50ID1cbiAgICAvLyBUaGUgY29udmVyc2lvbiB0byBhIHN0cmluZyB3aWxsIGFsd2F5cyB1c2UgYSBkb3QgYXMgdGhlIHNlcGFyYXRvci5cbiAgICAvLyBUaGF0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIGEgY29tbWEuXG4gICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5pbmRleE9mKCcuJykgPT09IC0xXG4gICAgICA/IDBcbiAgICAgIDogU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5sZW5ndGggLSBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSAtIDE7XG5cbiAgaWYgKGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnaGlnaFByZWNpc2lvbicsXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBjZW50QW1vdW50LFxuICAgICAgcHJlY2lzZUFtb3VudDogcGFyc2VJbnQoXG4gICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjb252ZXJ0ICBhIG51bWJlciBsaWtlIDguMDY2NjUyIHRvIGl0cyBjZW50YW1vdW50XG4gICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoYXQgYnkgbXVsdGlwbHlpbmcgaXQgd2l0aCAxMCAqKiBudW1iZXItb2YtZnJhY3Rpb24tZGlnaXRzXG4gICAgICAgIC8vIGJ1dCB0aGVuIHdlJ2xsIHJ1biBpbnRvIHByb2JsZW1zIHdpdGggSmF2YVNjcmlwdCdzIGZsb2F0aW5nIHBvaW50XG4gICAgICAgIC8vIG51bWJlciBwcmVjaXNpb24gYW5kIGVuZCB1cCB3aXRoIDgwNjY2NTEuOTk5OTk5OSwgYW5kIHRoZW4gcGFyc2VJbnRcbiAgICAgICAgLy8gY3V0cyBvZmYgdGhlIHJlbWFpbmRlci5cbiAgICAgICAgLy8gU28gaW5zdGVhZCBvZiB1c2luZyBtYXRocyB0byBjb252ZXJ0IHRoZSBudW1iZXIsIHdlIGp1c3QgcmVwbGFjZVxuICAgICAgICAvLyB0aGUgZG90IGluc2lkZSB0aGUgbnVtYmVyIHdoaWNoIGRvZXMgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBcIixcIiBhcyB3ZWxsLCBhcyBudW1iZXJzIGFsd2F5cyB1cyBhIGRvdFxuICAgICAgICAvLyB3aGVuIGNvbnZlcnRlZCB1c2luZyBTdHJpbmcoKS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhlIG1hdGhlbWF0aWNhbCB3YXk6IGFtb3VudEFzTnVtYmVyICogMTAgKiogZnJhY3Rpb25EaWdpdHNPZkFtb3VudCxcbiAgICAgICAgU3RyaW5nKGFtb3VudEFzTnVtYmVyKS5yZXBsYWNlKCcuJywgJycpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICAgIGZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgICBjdXJyZW5jeUNvZGUsXG4gICAgY2VudEFtb3VudCxcbiAgICBmcmFjdGlvbkRpZ2l0czogY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMsXG4gIH07XG59O1xuY29uc3QgY3JlYXRlRW1wdHlNb25leVZhbHVlID0gKGN1cnJlbmN5Q29kZTogVEN1cnJlbmN5Q29kZSk6IFRNb25leVZhbHVlID0+ICh7XG4gIHR5cGU6ICdjZW50UHJlY2lzaW9uJyxcbiAgY3VycmVuY3lDb2RlLFxuICBjZW50QW1vdW50OiBOYU4sXG4gIGZyYWN0aW9uRGlnaXRzOiAyLFxufSk7XG5cbmNvbnN0IGdldEFtb3VudEFzTnVtYmVyRnJvbU1vbmV5VmFsdWUgPSAobW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUpID0+XG4gIG1vbmV5VmFsdWUudHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nXG4gICAgPyBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgLyAxMCAqKiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBtb25leVZhbHVlLmNlbnRBbW91bnQgL1xuICAgICAgMTAgKiogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbi8vIGdldHMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYW5kIHNob3VsZCByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nXG5jb25zdCBmb3JtYXRBbW91bnQgPSAoXG4gIHJhd0Ftb3VudDogc3RyaW5nLFxuICBsb2NhbGU6IHN0cmluZyxcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlXG4pID0+IHtcbiAgLy8gZmFsbGJhY2sgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgZW50ZXIgYW4gYW1vdW50IHlldCAob3IgaXQncyBpbnZhbGlkKVxuICBjb25zdCBtb25leVZhbHVlID1cbiAgICBjcmVhdGVNb25leVZhbHVlKHJhd0Ftb3VudCwgbG9jYWxlLCBjdXJyZW5jeUNvZGUpIHx8XG4gICAgY3JlYXRlRW1wdHlNb25leVZhbHVlKGN1cnJlbmN5Q29kZSk7XG5cbiAgY29uc3QgYW1vdW50ID0gZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKTtcblxuICBjb25zdCBmcmFjdGlvbkRpZ2l0cyA9IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudFxuICAgID8gbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0c1xuICAgIDogYWxsQ3VycmVuY2llc1ttb25leVZhbHVlLmN1cnJlbmN5Q29kZV0uZnJhY3Rpb25EaWdpdHM7XG5cbiAgcmV0dXJuIGlzTmFOKGFtb3VudClcbiAgICA/ICcnXG4gICAgOiBhbW91bnQudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZnJhY3Rpb25EaWdpdHMgfSk7XG59O1xuXG5jb25zdCBnZXRBbW91bnRJbnB1dE5hbWUgPSAobmFtZT86IHN0cmluZykgPT5cbiAgbmFtZSA/IGAke25hbWV9LmFtb3VudGAgOiB1bmRlZmluZWQ7XG5jb25zdCBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uY3VycmVuY3lDb2RlYCA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgVFZhbHVlID0ge1xuICBhbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlIHwgJyc7XG59O1xuXG50eXBlIFRDdXN0b21FdmVudCA9IHtcbiAgdGFyZ2V0OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcbiAgfTtcbiAgcGVyc2lzdD86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIFRNb25leUlucHV0UHJvcHMgPSB7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgaWQgcHJvcGVydHkuIEFuIGlkIGlzIGF1dG8tZ2VuZXJhdGVkIHdoZW4gaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCBhcyBIVE1MIGBhdXRvY29tcGxldGVgIHByb3BlcnR5XG4gICAqL1xuICBhdXRvQ29tcGxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZSBpZiB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gICdhcmlhLWludmFsaWQnPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhUTUwgSUQgb2YgYW4gZWxlbWVudCBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB0aGUgaW5wdXQuXG4gICAqL1xuICAnYXJpYS1lcnJvcm1lc3NhZ2UnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSBhIEhUTUwgYG5hbWVgIHByb3BlcnR5IGZvciB0aGUgYW1vdW50IGlucHV0IGZpZWxkIChgJHtuYW1lfS5hbW91bnRgKSBhbmQgdGhlIGN1cnJlbmN5IGRyb3Bkb3duIChgJHtuYW1lfS5jdXJyZW5jeUNvZGVgKS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgaW5wdXQuIENvbnNpc3RzIG9mIHRoZSBjdXJyZW5jeSBjb2RlIGFuZCBhbiBhbW91bnQuIGBhbW91bnRgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYW1vdW50LiBBIGRvdCBoYXMgdG8gYmUgdXNlZCBhcyB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuXG4gICAqL1xuICB2YWx1ZTogVFZhbHVlO1xuICAvKipcbiAgICogTGlzdCBvZiBwb3NzaWJsZSBjdXJyZW5jaWVzLiBXaGVuIG5vdCBwcm92aWRlZCBvciBlbXB0eSwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGEgbGFiZWwgd2l0aCB0aGUgdmFsdWUncyBjdXJyZW5jeSBpbnN0ZWFkIG9mIGEgZHJvcGRvd24uXG4gICAqL1xuICBjdXJyZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXQgaXMgYmx1cnJlZFxuICAgKi9cbiAgb25CbHVyPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBmb2N1c2VkXG4gICAqL1xuICBvbkZvY3VzPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZWR1Y2UgdGhlIHBhZGRpbmdzIG9mIHRoZSBjb21wb25lbnQgZm9yIGEgdWkgY29tcGFjdCB2YXJpYW50XG4gICAqL1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkIChlLmcgbm90IGF1dGhvcml6ZWQsIG9yIGNoYW5nZXMgY3VycmVudGx5IHNhdmluZykuXG4gICAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBmaWVsZCBpcyBkaXNwbGF5aW5nIHJlYWQtb25seSBjb250ZW50XG4gICAqL1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBpbnB1dCBvbiBpbml0aWFsIHJlbmRlclxuICAgKi9cbiAgaXNBdXRvZm9jdXNzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIHdpdGggdGhlIGV2ZW50IG9mIHRoZSBpbnB1dCBvciBkcm9wZG93biB3aGVuIGVpdGhlciB0aGUgY3VycmVuY3kgb3IgdGhlIGFtb3VudCBoYXZlIGNoYW5nZWQuXG4gICAqL1xuICBvbkNoYW5nZT86IChldmVudDogVEN1c3RvbUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogRG9tIGVsZW1lbnQgdG8gcG9ydGFsIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSB0b1xuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVBvcnRhbFRhcmdldD86IFJlYWN0U2VsZWN0UHJvcHNbJ21lbnVQb3J0YWxUYXJnZXQnXTtcbiAgLyoqXG4gICAqIHotaW5kZXggdmFsdWUgZm9yIHRoZSBjdXJyZW5jeSBzZWxlY3QgbWVudSBwb3J0YWxcbiAgICogPGJyPlxuICAgKiBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCBgbWVudVBvcnRhbFRhcmdldGBcbiAgICovXG4gIG1lbnVQb3J0YWxaSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBtZW51IHNob3VsZCBibG9jayBzY3JvbGwgd2hpbGUgb3BlblxuICAgKiA8YnI+XG4gICAqIFtQcm9wcyBmcm9tIFJlYWN0IHNlbGVjdCB3YXMgdXNlZF0oaHR0cHM6Ly9yZWFjdC1zZWxlY3QuY29tL3Byb3BzKVxuICAgKi9cbiAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVNob3VsZEJsb2NrU2Nyb2xsJ107XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBpbnB1dCBoYXMgZXJyb3JzXG4gICAqL1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9sIHRvIGluZGljYXRlIG9uIHRoZSBpbnB1dCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdmFsdWVzIHRoYXQgYXJlIHBvdGVudGlhbGx5IGludmFsaWRcbiAgICovXG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogU2hvd3MgaGlnaCBwcmVjaXNpb24gYmFkZ2UgaW4gY2FzZSBjdXJyZW50IHZhbHVlIHVzZXMgaGlnaCBwcmVjaXNpb24uXG4gICAqL1xuICBoYXNIaWdoUHJlY2lzaW9uQmFkZ2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSG9yaXpvbnRhbCBzaXplIGxpbWl0IG9mIHRoZSBpbnB1dCBmaWVsZHMuXG4gICAqL1xuICBob3Jpem9udGFsQ29uc3RyYWludD86XG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgJ3NjYWxlJ1xuICAgIHwgJ2F1dG8nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbmN5IGlucHV0IGNhbm5vdCBiZSBtb2RpZmllZC5cbiAgICovXG4gIGlzQ3VycmVuY3lJbnB1dERpc2FibGVkPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1vbmV5SW5wdXQgPSAoe1xuICBjdXJyZW5jaWVzID0gW10sXG4gIGhvcml6b250YWxDb25zdHJhaW50ID0gJ3NjYWxlJyxcbiAgbWVudVBvcnRhbFpJbmRleCA9IDEsXG4gIC4uLnByb3BzXG59OiBUTW9uZXlJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IFtjdXJyZW5jeUhhc0ZvY3VzLCB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Ftb3VudEhhc0ZvY3VzLCB0b2dnbGVBbW91bnRIYXNGb2N1c10gPSB1c2VUb2dnbGVTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYW1vdW50SW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgbW9uZXlJbnB1dElkID0gdXNlRmllbGRJZChwcm9wcy5pZCwgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCk7XG5cbiAgaWYgKCFwcm9wcy5pc1JlYWRPbmx5KSB7XG4gICAgd2FybmluZyhcbiAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdNb25leUlucHV0OiBcIm9uQ2hhbmdlXCIgaXMgcmVxdWlyZWQgd2hlbiBpcyBub3QgcmVhZCBvbmx5LidcbiAgICApO1xuICB9XG5cbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyh7XG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBtZW51UG9ydGFsVGFyZ2V0OiBwcm9wcy5tZW51UG9ydGFsVGFyZ2V0LFxuICAgIGNvbXBvbmVudE5hbWU6ICdNb25leUlucHV0JyxcbiAgfSk7XG5cbiAgY29uc3QgeyBvbkZvY3VzIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQW1vdW50Rm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uRm9jdXMpXG4gICAgICBvbkZvY3VzKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzKHRydWUpO1xuICB9LCBbdG9nZ2xlQW1vdW50SGFzRm9jdXMsIG9uRm9jdXMsIG1vbmV5SW5wdXRJZCwgcHJvcHMubmFtZV0pO1xuXG4gIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGFtb3VudCA9IHByb3BzLnZhbHVlLmFtb3VudC50cmltKCk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMoZmFsc2UpO1xuICAgIC8vIFNraXAgZm9ybWF0dGluZyBmb3IgZW1wdHkgdmFsdWUgb3Igd2hlbiB0aGUgaW5wdXQgaXMgdXNlZCB3aXRoIGFuXG4gICAgLy8gdW5rbm93biBjdXJyZW5jeS5cbiAgICBpZiAoXG4gICAgICBhbW91bnQubGVuZ3RoID4gMCAmJlxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICYmXG4gICAgICBhbGxDdXJyZW5jaWVzW3Byb3BzLnZhbHVlLmN1cnJlbmN5Q29kZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBpbnRsLmxvY2FsZSxcbiAgICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgICApO1xuXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGVudGVyZWQgYSB2YWx1ZSB3aXRoIGNlbnRQcmVjaXNpb24sIHdlIGNhbiBmb3JtYXRcbiAgICAgIC8vIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGhhdCBjdXJyZW5jeSwgZS5nLiAyMC4xIHRvIDIwLjEwXG4gICAgICBpZiAoU3RyaW5nKGZvcm1hdHRlZEFtb3VudCkgIT09IGFtb3VudCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGVtaXQgYW4gZXZlbnQgd2l0aCB0aGUgbm93IGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVkQW1vdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlPy4oZmFrZUV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBpbnRsLmxvY2FsZSxcbiAgICBvbkNoYW5nZSxcbiAgICBtb25leUlucHV0SWQsXG4gICAgcHJvcHMubmFtZSxcbiAgICBwcm9wcy52YWx1ZS5hbW91bnQsXG4gICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIHRvZ2dsZUFtb3VudEhhc0ZvY3VzLFxuICBdKTtcblxuICBjb25zdCBoYW5kbGVBbW91bnRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50IHwgRm9jdXNFdmVudCkgPT4ge1xuICAgICAgaWYgKGlzTnVtYmVyaXNoKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlKSkge1xuICAgICAgICBvbkNoYW5nZT8uKHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogeyB2YWx1ZTogVEN1cnJlbmN5Q29kZSB9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb24udmFsdWU7XG4gICAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlICE9PSBjdXJyZW5jeUNvZGUpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgdXNlciBjaGFuZ2VzIGZyb20gYSBjdXJyZW5jeSB3aXRoIDMgZnJhY3Rpb24gZGlnaXRzIHRvXG4gICAgICAgIC8vIGEgY3VycmVuY3kgd2l0aCAyIGZyYWN0aW9uIGRpZ2l0cywgYW5kIHdoZW4gdGhlIGlucHV0IHZhbHVlIHdhc1xuICAgICAgICAvLyBcIjkuMDAwXCIgKDkpLCB0aGVuIGl0IHNob3VsZCBjaGFuZ2UgdG8gXCI5LjAwXCIgdG8gcmVmbGVjdCB0aGUgbmV3XG4gICAgICAgIC8vIGN1cnJlbmN5J3MgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY3VycmVuY3kgd2FzIGEgaGlnaC1wcmVjaXNpb24gcHJpY2UsIHRoZW4gbm8gZGlnaXRzIHNob3VsZFxuICAgICAgICAvLyBiZSBsb3N0XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICAgICAgICBwcm9wcy52YWx1ZS5hbW91bnQudHJpbSgpLFxuICAgICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICAgIGN1cnJlbmN5Q29kZVxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgdXNlciBjb3VsZCBiZSBjaGFuZ2luZyB0aGUgY3VycmVuY3kgYmVmb3JlIGVudGVyaW5nIGFueSBhbW91bnQsXG4gICAgICAgIC8vIG9yIHdoaWxlIHRoZSBhbW91bnQgaXMgaW52YWxpZC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRvbid0IGF0dGVtcHQgdG9cbiAgICAgICAgLy8gZm9ybWF0IHRoZSBhbW91bnQuXG4gICAgICAgIGNvbnN0IG5leHRBbW91bnQgPSBpc05hTihOdW1iZXIoZm9ybWF0dGVkQW1vdW50KSlcbiAgICAgICAgICA/IHByb3BzLnZhbHVlLmFtb3VudFxuICAgICAgICAgIDogZm9ybWF0dGVkQW1vdW50O1xuXG4gICAgICAgIC8vIGNoYW5nZSBjdXJyZW5jeSBjb2RlXG4gICAgICAgIGNvbnN0IGZha2VDdXJyZW5jeUV2ZW50ID0ge1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJyZW5jeUNvZGUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlQ3VycmVuY3lFdmVudCk7XG5cbiAgICAgICAgLy8gY2hhbmdlIGFtb3VudCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKHByb3BzLnZhbHVlLmFtb3VudCAhPT0gbmV4dEFtb3VudCkge1xuICAgICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0QW1vdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFtb3VudElucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBpbnRsLmxvY2FsZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgbW9uZXlJbnB1dElkLFxuICAgICAgcHJvcHMubmFtZSxcbiAgICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICAgIHByb3BzLnZhbHVlLmN1cnJlbmN5Q29kZSxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICBuYW1lOiBnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cyh0cnVlKTtcbiAgfSwgW29uRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMsIHByb3BzLm5hbWUsIG1vbmV5SW5wdXRJZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUN1cnJlbmN5Qmx1ciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKGZhbHNlKTtcbiAgfSwgW3RvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdKTtcblxuICBjb25zdCBoYXNOb0N1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgaGFzRm9jdXMgPSBjdXJyZW5jeUhhc0ZvY3VzIHx8IGFtb3VudEhhc0ZvY3VzO1xuICBjb25zdCBjdXJyZW5jeVNlbGVjdFN0eWxlcyA9IGNyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzKHtcbiAgICBoYXNXYXJuaW5nOiBwcm9wcy5oYXNXYXJuaW5nLFxuICAgIGhhc0Vycm9yOiBwcm9wcy5oYXNFcnJvcixcbiAgICBpc0NvbmRlbnNlZDogcHJvcHMuaXNDb25kZW5zZWQsXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICBpc1JlYWRPbmx5OiBwcm9wcy5pc1JlYWRPbmx5LFxuICAgIG1lbnVQb3J0YWxaSW5kZXg6IG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgY3VycmVuY3lIYXNGb2N1cyxcbiAgfSk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3lDb2RlKSA9PiAoe1xuICAgIGxhYmVsOiBjdXJyZW5jeUNvZGUsXG4gICAgdmFsdWU6IGN1cnJlbmN5Q29kZSxcbiAgfSkpO1xuXG4gIGNvbnN0IG9wdGlvbiA9ICgoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChcbiAgICAgIChvcHRpb25DYW5kaWRhdGUpID0+IG9wdGlvbkNhbmRpZGF0ZS52YWx1ZSA9PT0gcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXG4gICAgKTtcbiAgICBpZiAobWF0Y2hlZE9wdGlvbikgcmV0dXJuIG1hdGNoZWRPcHRpb247XG4gICAgLy8gZW5zdXJlIGFuIG9wdGlvbiBpcyBmb3VuZCwgZXZlbiB3aGVuIHRoZSBjdXJyZW5jaWVzIGRvbid0IGluY2x1ZGVcbiAgICAvLyB0aGUgbW9uZXkgdmFsdWUncyBjdXJyZW5jeUNvZGVcbiAgICBpZiAocHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSAhPT0gJycpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgICAgfTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSkoKTtcblxuICBjb25zdCBpc0hpZ2hQcmVjaXNpb24gPVxuICAgICFNb25leUlucHV0LmlzRW1wdHkocHJvcHMudmFsdWUpICYmXG4gICAgTW9uZXlJbnB1dC5pc0hpZ2hQcmVjaXNpb24ocHJvcHMudmFsdWUsIGludGwubG9jYWxlKTtcblxuICBjb25zdCB7IG9uQmx1ciB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNvbnRhaW5lckJsdXIgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZXMgdGhhdCBib3RoIGZpZWxkcyBhcmUgbWFya2VkIGFzIHRvdWNoZWQgd2hlbiBvbmUgb2YgdGhlbVxuICAgICAgLy8gaXMgYmx1cnJlZFxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb25CbHVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICFjb250YWluZXJSZWYuY3VycmVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKVxuICAgICAgKSB7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBvbkJsdXIoe1xuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQmx1ciwgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXVxuICApO1xuXG4gIGNvbnN0IFRvb2x0aXBQb3J0YWwgPSB1c2VDYWxsYmFjayhcbiAgICAocmVtYWluaW5nUHJvcHM6IFRUb29sdGlwUHJvcHMgJiB7IGlkOiBzdHJpbmcgfSkgPT4gKFxuICAgICAgPFBvcnRhbCB7Li4ucmVtYWluaW5nUHJvcHN9IGlkPXtwcm9wcy5pZCF9IC8+XG4gICAgKSxcbiAgICBbcHJvcHMuaWRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29uc3RyYWludHMuSG9yaXpvbnRhbCBtYXg9e2hvcml6b250YWxDb25zdHJhaW50fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBgfVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbmV5LWlucHV0LWNvbnRhaW5lclwiXG4gICAgICAgIG9uQmx1cj17KGV2ZW50KSA9PlxuICAgICAgICAgIGhhbmRsZUNvbnRhaW5lckJsdXIoZXZlbnQgYXMgRm9jdXNFdmVudDxIVE1MRGl2RWxlbWVudD4pXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAge2hhc05vQ3VycmVuY2llcyA/IChcbiAgICAgICAgICA8Q3VycmVuY3lMYWJlbFxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpIGFzIHN0cmluZ31cbiAgICAgICAgICAgIGlzQ29uZGVuc2VkPXtwcm9wcy5pc0NvbmRlbnNlZH1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e3Byb3BzLmlzRGlzYWJsZWR9XG4gICAgICAgICAgICBpc1JlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb24gJiYgb3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvQ3VycmVuY3lMYWJlbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpbnB1dElkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgbmFtZT17Z2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17b3B0aW9ufVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQgfHwgcHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzU2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBjb21wb25lbnRzPXtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFNpbmdsZVZhbHVlOiAoaW5uZXJQcm9wcykgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNpbmdsZVZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgICAgICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBJbnB1dDogKG93blByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5JbnB1dCB7Li4ub3duUHJvcHN9IHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRHJvcGRvd25JbmRpY2F0b3I6IHByb3BzLmlzQ3VycmVuY3lJbnB1dERpc2FibGVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogRHJvcGRvd25JbmRpY2F0b3IsXG4gICAgICAgICAgICAgIH0gYXMgUmVhY3RTZWxlY3RQcm9wc1snY29tcG9uZW50cyddXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgbWVudUlzT3Blbj17cHJvcHMuaXNSZWFkT25seSA/IGZhbHNlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgc3R5bGVzPXtjdXJyZW5jeVNlbGVjdFN0eWxlcyBhcyBSZWFjdFNlbGVjdFByb3BzWydzdHlsZXMnXX1cbiAgICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUN1cnJlbmN5Rm9jdXN9XG4gICAgICAgICAgICBtZW51UG9ydGFsVGFyZ2V0PXtwcm9wcy5tZW51UG9ydGFsVGFyZ2V0fVxuICAgICAgICAgICAgbWVudVNob3VsZEJsb2NrU2Nyb2xsPXtwcm9wcy5tZW51U2hvdWxkQmxvY2tTY3JvbGx9XG4gICAgICAgICAgICBtZW51UGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUN1cnJlbmN5Qmx1cn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDdXJyZW5jeUNoYW5nZSBhcyBSZWFjdFNlbGVjdFByb3BzWydvbkNoYW5nZSddfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjdXJyZW5jeS1kcm9wZG93blwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYH1cbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXthbW91bnRJbnB1dFJlZn1cbiAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKX1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT17cHJvcHMuYXV0b0NvbXBsZXRlfVxuICAgICAgICAgICAgbmFtZT17Z2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpfVxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlQW1vdW50Rm9jdXN9XG4gICAgICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWUuYW1vdW50fVxuICAgICAgICAgICAgY3NzPXtbXG4gICAgICAgICAgICAgIGdldEFtb3VudElucHV0U3R5bGVzKHsgLi4ucHJvcHMsIGhhc0ZvY3VzIH0pLFxuICAgICAgICAgICAgICAvLyBhY2NvdW50cyBmb3Igc2l6ZSBvZiBpY29uXG4gICAgICAgICAgICAgIHByb3BzLmhhc0hpZ2hQcmVjaXNpb25CYWRnZSAmJlxuICAgICAgICAgICAgICAgIGlzSGlnaFByZWNpc2lvbiAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmc0MH07XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgY3VycmVuY3lIYXNGb2N1cyAmJlxuICAgICAgICAgICAgICAgICFwcm9wcy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzUmVhZE9ubHkgJiZcbiAgICAgICAgICAgICAgICBjc3NgXG4gICAgICAgICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogJHtkZXNpZ25Ub2tlbnMuYm9yZGVyQ29sb3JGb3JJbnB1dFdoZW5Gb2N1c2VkfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBbW91bnRDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUFtb3VudEJsdXJ9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlYWRPbmx5PXtwcm9wcy5pc1JlYWRPbmx5fVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5pc0F1dG9mb2N1c3NlZH1cbiAgICAgICAgICAgIHsuLi5maWx0ZXJEYXRhQXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgIGhvcml6b250YWxDb25zdHJhaW50LFxuICAgICAgICAgICAgICBtZW51UG9ydGFsWkluZGV4LFxuICAgICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLyogQVJJQSAqL1xuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXtwcm9wc1snYXJpYS1pbnZhbGlkJ119XG4gICAgICAgICAgICBhcmlhLWVycm9ybWVzc2FnZT17cHJvcHNbJ2FyaWEtZXJyb3JtZXNzYWdlJ119XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7cHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmIGlzSGlnaFByZWNpc2lvbiAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7IXByb3BzLmlzRGlzYWJsZWQgJiYgPGRpdiBpZD17Z2V0UG9ydGFsSWQocHJvcHMuaWQpfSAvPn1cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIGdldEhpZ2hQcmVjaXNpb25XcmFwcGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgIG9mZj17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcC1lbmRcIlxuICAgICAgICAgICAgICAgICAgLy8gd2UgdXNlIG5lZ2F0aXZlIG1hcmdpbiB0byBtYWtlIHVwIGZvciB0aGUgcGFkZGluZyBpbiB0aGUgVG9vbHRpcCBXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0b29sdGlwIGlzIGZsdXNoIHdpdGggdGhlIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgc3R5bGVzPXt7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IGAke2Rlc2lnblRva2Vucy5zcGFjaW5nMjB9IC0ke2Rlc2lnblRva2Vucy5zcGFjaW5nMTB9ICR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gMGAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5oaWdoUHJlY2lzaW9uKX1cbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICAgICAgVG9vbHRpcFdyYXBwZXJDb21wb25lbnQ6IFRvb2x0aXBQb3J0YWwgYXMgQ29tcG9uZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFdyYXBwZXIsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGcmFjdGlvbkRpZ2l0c0ljb25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmlzRGlzYWJsZWQgPyAnbmV1dHJhbDYwJyA6ICdpbmZvJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db25zdHJhaW50cy5Ib3Jpem9udGFsPlxuICApO1xufTtcblxuTW9uZXlJbnB1dC5kaXNwbGF5TmFtZSA9ICdNb25leUlucHV0JztcblxuTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkID0gZ2V0QW1vdW50SW5wdXROYW1lO1xuXG5Nb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZCA9IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lO1xuXG5Nb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUgPSAodmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpID0+XG4gIGNyZWF0ZU1vbmV5VmFsdWUoXG4gICAgdHlwZW9mIHZhbHVlLmFtb3VudCA9PT0gJ3N0cmluZycgPyB2YWx1ZS5hbW91bnQudHJpbSgpIDogJycsXG4gICAgbG9jYWxlLFxuICAgIHZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG5Nb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZSA9IChcbiAgbW9uZXlWYWx1ZTogVE1vbmV5VmFsdWUsXG4gIGxvY2FsZTogc3RyaW5nXG4pOiBUVmFsdWUgPT4ge1xuICBpZiAoIW1vbmV5VmFsdWUpIHJldHVybiB7IGN1cnJlbmN5Q29kZTogJycsIGFtb3VudDogJycgfTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBsb2NhbGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogQSBsb2NhbGUgbXVzdCBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgYmUgcGFzc2VkIGFzIGFuIG9iamVjdCBvciBiZSB1bmRlZmluZWQnXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgPT09ICdzdHJpbmcnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBjb250YWluIFwiY3VycmVuY3lDb2RlXCInXG4gICk7XG5cbiAgd2FybmluZyhcbiAgICBoYXMoYWxsQ3VycmVuY2llcywgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUpLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCB1c2Uga25vd24gY3VycmVuY3kgY29kZSdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIC8vIGhpZ2hQcmVjaXNpb24gb3IgY2VudFByZWNpc2lvbiB2YWx1ZXMgbXVzdCBiZSBzZXRcbiAgICB0eXBlb2YgbW9uZXlWYWx1ZS5jZW50QW1vdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGVvZiBtb25leVZhbHVlLnByZWNpc2VBbW91bnQgPT09ICdudW1iZXInICYmXG4gICAgICAgIHR5cGVvZiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJhbW91bnRcIidcbiAgKTtcblxuICBjb25zdCBhbW91bnQgPSBmb3JtYXRBbW91bnQoXG4gICAgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZShtb25leVZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHtcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbW9uZXlWYWx1ZS5mcmFjdGlvbkRpZ2l0cyxcbiAgICB9KSxcbiAgICBsb2NhbGUsXG4gICAgbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGVcbiAgKTtcblxuICByZXR1cm4geyBhbW91bnQsIGN1cnJlbmN5Q29kZTogbW9uZXlWYWx1ZS5jdXJyZW5jeUNvZGUgfTtcbn07XG5cbk1vbmV5SW5wdXQuaXNFbXB0eSA9IChmb3JtVmFsdWU6IFRWYWx1ZSkgPT5cbiAgIWZvcm1WYWx1ZSB8fFxuICBmb3JtVmFsdWUuYW1vdW50LnRyaW0oKSA9PT0gJycgfHxcbiAgZm9ybVZhbHVlLmN1cnJlbmN5Q29kZS50cmltKCkgPT09ICcnO1xuXG5Nb25leUlucHV0LmlzSGlnaFByZWNpc2lvbiA9IChmb3JtVmFsdWU6IFRWYWx1ZSwgbG9jYWxlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgd2FybmluZyhcbiAgICAhTW9uZXlJbnB1dC5pc0VtcHR5KGZvcm1WYWx1ZSksXG4gICAgJ01vbmV5VmFsdWUuaXNIaWdoUHJlY2lzaW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgbW9uZXkgdmFsdWUuJ1xuICApO1xuICBjb25zdCBtb25leVZhbHVlID0gTW9uZXlJbnB1dC5jb252ZXJ0VG9Nb25leVZhbHVlKGZvcm1WYWx1ZSwgbG9jYWxlKTtcbiAgcmV0dXJuIG1vbmV5VmFsdWU/LnR5cGUgPT09ICdoaWdoUHJlY2lzaW9uJztcbn07XG5cbnR5cGUgVFRvdWNoZWQgPSB7XG4gIGFtb3VudD86IGJvb2xlYW47XG4gIGN1cnJlbmN5Q29kZT86IGJvb2xlYW47XG59O1xuXG5Nb25leUlucHV0LmlzVG91Y2hlZCA9ICh0b3VjaGVkPzogVFRvdWNoZWQpID0+XG4gIEJvb2xlYW4odG91Y2hlZCAmJiB0b3VjaGVkLmN1cnJlbmN5Q29kZSAmJiB0b3VjaGVkLmFtb3VudCk7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmV5SW5wdXQ7XG4iXX0= */"), process.env.NODE_ENV === "production" ? "" : ";label:MoneyInput;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbmV5LWlucHV0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4MUJZIiwiZmlsZSI6Im1vbmV5LWlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHVzZVJlZixcbiAgdXNlQ2FsbGJhY2ssXG4gIHR5cGUgUmVhY3ROb2RlLFxuICB0eXBlIENvbXBvbmVudFR5cGUsXG4gIHR5cGUgQ2hhbmdlRXZlbnQsXG4gIHR5cGUgRm9jdXNFdmVudCxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgaGFzIGZyb20gJ2xvZGFzaC9oYXMnO1xuaW1wb3J0IFNlbGVjdCwge1xuICBjb21wb25lbnRzLFxuICB0eXBlIFNpbmdsZVZhbHVlUHJvcHMsXG4gIHR5cGUgUHJvcHMgYXMgUmVhY3RTZWxlY3RQcm9wcyxcbn0gZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7IHVzZUludGwgfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCB7IGNzcywgdHlwZSBUaGVtZSB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGRlc2lnblRva2VucyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHtcbiAgd2FybmluZyxcbiAgaXNOdW1iZXJpc2gsXG4gIGZpbHRlckRhdGFBdHRyaWJ1dGVzLFxuICBjcmVhdGVTZXF1ZW50aWFsSWQsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3V0aWxzJztcbmltcG9ydCBUb29sdGlwLCB7IHR5cGUgVFRvb2x0aXBQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L3Rvb2x0aXAnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd25JbmRpY2F0b3IsXG4gIGNyZWF0ZVNlbGVjdFN0eWxlcyxcbiAgd2FybklmTWVudVBvcnRhbFByb3BzQXJlTWlzc2luZyxcbn0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvc2VsZWN0LXV0aWxzJztcbmltcG9ydCB7IEZyYWN0aW9uRGlnaXRzSWNvbiB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2ljb25zJztcbmltcG9ydCBDb25zdHJhaW50cyBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9jb25zdHJhaW50cyc7XG5pbXBvcnQgeyB1c2VGaWVsZElkLCB1c2VUb2dnbGVTdGF0ZSB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2hvb2tzJztcbmltcG9ydCBhbGxDdXJyZW5jaWVzIGZyb20gJy4vY3VycmVuY2llcyc7XG5pbXBvcnQge1xuICBnZXRIaWdoUHJlY2lzaW9uV3JhcHBlclN0eWxlcyxcbiAgZ2V0Q3VycmVuY3lMYWJlbFN0eWxlcyxcbiAgZ2V0QW1vdW50SW5wdXRTdHlsZXMsXG59IGZyb20gJy4vbW9uZXktaW5wdXQuc3R5bGVzJztcbmltcG9ydCBtZXNzYWdlcyBmcm9tICcuL21lc3NhZ2VzJztcblxuY29uc3QgVG9vbHRpcFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuYDtcblxuY29uc3QgbW9uZXlJbnB1dFNlcXVlbnRpYWxJZCA9IGNyZWF0ZVNlcXVlbnRpYWxJZCgnbW9uZXktaW5wdXQtJyk7XG5cbmNvbnN0IGdldFBvcnRhbElkID0gKGlkPzogc3RyaW5nKSA9PiBgcG9ydGFsLSR7aWR9YDtcbmNvbnN0IGdldFBvcnRhbE5vZGUgPSAoaWQ/OiBzdHJpbmcpID0+XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2dldFBvcnRhbElkKGlkKX1gKTtcblxudHlwZSBUTGFiZWwgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFBvcnRhbCA9IChwcm9wczogVExhYmVsKSA9PiB7XG4gIGNvbnN0IGRvbU5vZGUgPSBnZXRQb3J0YWxOb2RlKHByb3BzLmlkKTtcbiAgaWYgKGRvbU5vZGUpIHtcbiAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKHByb3BzLmNoaWxkcmVuLCBkb21Ob2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IEN1cnJlbmN5TGFiZWwgPSAocHJvcHM6IFRMYWJlbCkgPT4gKFxuICA8bGFiZWwgaHRtbEZvcj17cHJvcHMuaWR9IGNzcz17Z2V0Q3VycmVuY3lMYWJlbFN0eWxlcyhwcm9wcyl9PlxuICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgPC9sYWJlbD5cbik7XG5cbkN1cnJlbmN5TGFiZWwuZGlzcGxheU5hbWUgPSAnQ3VycmVuY3lMYWJlbCc7XG5cbnR5cGUgVFNpbmdsZVZhbHVlID0ge1xuICBpZD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG59ICYgU2luZ2xlVmFsdWVQcm9wcztcblxuY29uc3QgU2luZ2xlVmFsdWUgPSAoeyBpZCwgLi4ucHJvcHMgfTogVFNpbmdsZVZhbHVlKSA9PiAoXG4gIDxjb21wb25lbnRzLlNpbmdsZVZhbHVlIHsuLi5wcm9wc30+XG4gICAgPGxhYmVsIGh0bWxGb3I9e2lkfT57cHJvcHMuY2hpbGRyZW59PC9sYWJlbD5cbiAgPC9jb21wb25lbnRzLlNpbmdsZVZhbHVlPlxuKTtcblxuU2luZ2xlVmFsdWUuZGlzcGxheU5hbWUgPSAnU2luZ2xlVmFsdWUnO1xuXG50eXBlIFRDcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlcyA9IChcbiAgaW5wdXQ6IFRJbnB1dFByb3BzICYge1xuICAgIGN1cnJlbmN5SGFzRm9jdXM/OiBib29sZWFuO1xuICB9XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIFRJbnB1dFByb3BzID0ge1xuICBpc0NvbmRlbnNlZD86IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHRoZW1lPzogVGhlbWU7XG59O1xuXG50eXBlIFRCYXNlID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xufTtcbi8vIG92ZXJ3cml0ZSBzdHlsZXMgb2YgY3JlYXRlU2VsZWN0U3R5bGVzXG5jb25zdCBjcmVhdGVDdXJyZW5jeVNlbGVjdFN0eWxlczogVENyZWF0ZUN1cnJlbmN5U2VsZWN0U3R5bGVzID0gKHtcbiAgaGFzV2FybmluZyxcbiAgaGFzRXJyb3IsXG4gIGlzQ29uZGVuc2VkLFxuICBpc0Rpc2FibGVkLFxuICBpc1JlYWRPbmx5LFxuICBtZW51UG9ydGFsWkluZGV4LFxuICBjdXJyZW5jeUhhc0ZvY3VzLFxufSkgPT4ge1xuICBjb25zdCBzZWxlY3RTdHlsZXMgPSBjcmVhdGVTZWxlY3RTdHlsZXMoe1xuICAgIGhhc1dhcm5pbmcsXG4gICAgaGFzRXJyb3IsXG4gICAgbWVudVBvcnRhbFpJbmRleCxcbiAgICBpc0NvbmRlbnNlZCxcbiAgICBpc1JlYWRPbmx5LFxuICAgIGlzRGlzYWJsZWQsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLnNlbGVjdFN0eWxlcyxcbiAgICBjb250cm9sOiAoYmFzZTogVEJhc2UsIHN0YXRlOiBSZWFjdFNlbGVjdFByb3BzKSA9PiAoe1xuICAgICAgLi4uc2VsZWN0U3R5bGVzLmNvbnRyb2woYmFzZSwgc3RhdGUpLFxuICAgICAgcGFkZGluZzogYDAgJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzI1fWAsXG4gICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzAnLFxuICAgICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6ICcwJyxcbiAgICAgIGJvcmRlclJpZ2h0OiAnMCcsXG4gICAgICBtaW5XaWR0aDogJzgwcHgnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBib3JkZXJDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkRpc2FibGVkfSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpXG4gICAgICAgICAgcmV0dXJuIGAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlblJlYWRvbmx5fSAhaW1wb3J0YW50YDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRXJyb3I7XG4gICAgICAgIGlmIChoYXNXYXJuaW5nKSByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuV2FybmluZztcbiAgICAgICAgaWYgKGN1cnJlbmN5SGFzRm9jdXMpIHtcbiAgICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXRXaGVuRm9jdXNlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzaWduVG9rZW5zLmJvcmRlckNvbG9yRm9ySW5wdXQ7XG4gICAgICB9KSgpLFxuICAgICAgY3Vyc29yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuICdub3QtYWxsb3dlZCc7XG4gICAgICAgIGlmIChpc1JlYWRPbmx5KSByZXR1cm4gYGRlZmF1bHRgO1xuICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xuICAgICAgfSkoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKCgpID0+IHtcbiAgICAgICAgaWYgKGlzUmVhZE9ubHkpIHJldHVybiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuUmVhZG9ubHk7XG4gICAgICAgIHJldHVybiBiYXNlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0pKCksXG4gICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IGRlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0LFxuICAgICAgfSxcbiAgICAgICcmOmhvdmVyOm5vdCg6cmVhZC1vbmx5KTpub3QoOmRpc2FibGVkKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkZXNpZ25Ub2tlbnMuYmFja2dyb3VuZENvbG9yRm9ySW5wdXRXaGVuSG92ZXJlZCxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgc2luZ2xlVmFsdWU6IChiYXNlOiBUQmFzZSkgPT4gKHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgbWF4V2lkdGg6ICdpbml0aWFsJyxcbiAgICAgIGNvbG9yOiAoKCkgPT4ge1xuICAgICAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5EaXNhYmxlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSByZXR1cm4gZGVzaWduVG9rZW5zLmZvbnRDb2xvckZvcklucHV0V2hlbkVycm9yO1xuICAgICAgICBpZiAoaGFzV2FybmluZykgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5XYXJuaW5nO1xuICAgICAgICBpZiAoaXNSZWFkT25seSkgcmV0dXJuIGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seTtcbiAgICAgICAgcmV0dXJuIGJhc2UuY29sb3I7XG4gICAgICB9KSgpLFxuICAgIH0pLFxuICAgIGRyb3Bkb3duSW5kaWNhdG9yOiAoKSA9PiAoe1xuICAgICAgZmlsbDogaXNSZWFkT25seVxuICAgICAgICA/IGRlc2lnblRva2Vucy5mb250Q29sb3JGb3JJbnB1dFdoZW5SZWFkb25seVxuICAgICAgICA6IGRlc2lnblRva2Vucy5jb2xvck5ldXRyYWw0MCxcbiAgICB9KSxcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFRDdXJyZW5jeUNvZGUgPSBrZXlvZiB0eXBlb2YgYWxsQ3VycmVuY2llcztcblxudHlwZSBUTW9uZXlDb25kaXRpb25hbFByb3BzID1cbiAgfCB7IHR5cGU6ICdoaWdoUHJlY2lzaW9uJzsgcHJlY2lzZUFtb3VudDogbnVtYmVyIH1cbiAgfCB7XG4gICAgICAvKipcbiAgICAgICAqIFVzdWFsbHkgZWl0aGVyIGEgYGNlbnRQcmVjaXNpb25gIG9yIGEgYGhpZ2hQcmVjaXNpb25gLlxuICAgICAgICovXG4gICAgICB0eXBlOiAnY2VudFByZWNpc2lvbic7XG4gICAgICBwcmVjaXNlQW1vdW50PzogbmV2ZXI7XG4gICAgfTtcbmV4cG9ydCB0eXBlIFRNb25leVZhbHVlID0ge1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGU7XG4gIGNlbnRBbW91bnQ6IG51bWJlcjtcbiAgZnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcbn0gJiBUTW9uZXlDb25kaXRpb25hbFByb3BzO1xuLy8gVGhlIE1vbmV5SW5wdXQgY29tcG9uZW50IGFsd2F5cyBvcGVyYXRlcyBvbiBhIHZhbHVlIGNvbnNpc3Rpbmcgb2Y6XG4vLyBgYGBcbi8vIHsgYW1vdW50OiBTdHJpbmcsIGN1cnJlbmN5Q29kZTogU3RyaW5nIH1cbi8vIGBgYFxuLy9cbi8vIFRoZSBhbW91bnQgbWF5IG9ubHkgdXNlIGEgZG90IGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbi8vIFRoZSBgY3VycmVuY3lDb2RlYCBtdXN0IGJlIHN1cHBvcnRlZCBieSB0aGUgQVBJLlxuLy9cbi8vIFRoZSBgTW9uZXlJbnB1dGAgZG9lcyBub3QgZG8gYW55IHZhbGlkYXRpb24gb24gaXRzIG93bi4gSXQgb25seSBzZXJ2ZXMgYXMgYSB3YXlcbi8vIHRvIGdldCB0aGUgYW1vdW50IGFuZCBgY3VycmVuY3lDb2RlYCBpbnB1dCBmcm9tIHRoZSB1c2VyLiBWYWxpZGF0aW9uIGlzIGFsd2F5c1xuLy8gdXAgdG8gdGhlIHBhcmVudC5cbi8vXG4vLyBUaGUgQ1RQIEFQSSBzdXBwb3J0cyB0d28gdHlwZXMgb2YgcHJpY2VzOiBgY2VudFByZWNpc2lvbmAgYW5kIGBoaWdoUHJlY2lzaW9uYC5cbi8vIFRoZSBgTW9uZXlJbnB1dGAgaXRzZWxmIGRvZXMgbm90IGtub3cgYWJvdXQgdGhlc2UuIEhvd2V2ZXIsXG4vLyBpdCBoYXMgdHdvIHN0YXRpYyBtZXRob2RzIGRlZmluZWQgKGBjb252ZXJ0VG9Nb25leVZhbHVlYCBhbmQgYHBhcnNlTW9uZXlWYWx1ZWApLFxuLy8gd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGBNb25leUlucHV0YCB2YWx1ZSBhbmQgdGhlIGBNb25leVZhbHVlYFxuLy8gc3VwcG9ydGVkIGJ5IHRoZSBBUEkuXG4vLyBTb21lIHBsYWNlcyBpbiB0aGUgQVBJIGRvIG5vdCBzdXBwb3J0IGBoaWdoUHJlY2lzaW9uYCBwcmljZXMsIGJ1dCB0aGVcbi8vIGBjb252ZXJ0VG9Nb25leVZhbHVlIGB3aWxsIGFsd2F5cyByZXR1cm4gZWl0aGVyIGEgYGNlbnRQcmVjaXNpb24gYG9yIGFcbi8vIGBoaWdoUHJlY2lzaW9uYCBwcmljZS4gSXQncyB1cCB0aGUgYE1vbmV5SW5wdXRgJ3MgcGFyZW50IHRvIHNob3cgYSB2YWxpZGF0aW9uXG4vLyBlcnJvciBpbiBjYXNlIGEgYGhpZ2hQcmVjaXNpb25gIHByaWNlIGlzIHVzZWQuXG4vL1xuLy8gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFzIHRvIGhhdmUgYGhpZ2hQcmVjaXNpb25gIHdoZW4gdGhlIG51bWJlciBvZiBzdXBwbGllZFxuLy8gZnJhY3Rpb24gZGlnaXRzIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0aGUgY3VycmVuY3kgdXNlcy4gRm9yXG4vLyBleGFtcGxlLCBgRVVSIDQyLjAwYCBpcyBhbHdheXMgYSBgY2VudFByZWNpc2lvbmAgcHJpY2UsIHdoaWxlIGBFVVIgNDIuMDAxYCBpcyBhbHdheXMgYVxuLy8gYGhpZ2hQcmVjaXNpb25gIHByaWNlLiBJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBgRVVSIDQyLjAwYCBhcyBhIGBoaWdoUHJlY2lzaW9uYFxuLy8gcHJpY2UuXG4vL1xuLy8gVGhlIGZpcnN0IHRpbWUgdGhlIGNvbXBvbmVudCByZW5kZXJzLCB3ZSB3YW50IHRvIHRyeSB0byBzaG93IHRoZSBgY2VudEFtb3VudGBcbi8vIGFzIGEgZm9ybWF0dGVkIG51bWJlci4gVG8gYWNoaWV2ZSB0aGlzLCB0aGUgYHBhcnNlTW9uZXlWYWx1ZWAgZnVuY3Rpb24gY2FuXG4vLyBiZSB1c2VkIHRvIHR1cm4gdGhlIEFQSSB2YWx1ZSBpbnRvIGEgdmFsdWUgdGhlIGBNb25leUlucHV0YCB1bmRlcnN0YW5kcy5cbi8vIER1cmluZyB0aGlzIHRyYW5zZm9ybWF0aW9uLCB0aGUgbW9uZXkgdmFsdWUgd2lsbCBnZXQgZm9ybWF0dGVkIGludG8gXCJhbW91bnRcIi5cbi8vXG4vLyBXaGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZhbHVlLCB3ZSBkb24ndCB3YW50IHRvIGZvcm1hdCBhZ2Fpbi4gV2Ugb25seSBmb3JtYXRcbi8vIGluIGNhc2UgdGhlIHVzZXIgYmx1cnMgdGhlIGZpZWxkLiBUaGlzIGF2b2lkcyBtYW55IGVkZ2UgY2FzZXMgd2hlcmUgdGhlXG4vLyBmb3JtYXR0aW5nIHdvdWxkIG1lc3Mgd2l0aCB0aGUgdXNlcidzIGlucHV0LlxuLy9cbi8vXG4vLyBBIGZ1bGwgZXhhbXBsZSBvZiBhbiBgTW9uZXlWYWx1ZWAgd2l0aCBgY2VudFByZWNpc2lvbmAgd291bGQgYmVcbi8vIGBgYFxuLy8ge1xuLy8gICBcInR5cGVcIjogXCJjZW50UHJlY2lzaW9uXCIsXG4vLyAgIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgIFwiY2VudEFtb3VudFwiOiA0MjAwLFxuLy8gICBcImZyYWN0aW9uRGlnaXRzXCI6IDJcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgNDIuMDBgLlxuLy9cbi8vIEEgZnVsbCBleGFtcGxlIG9mIGFuIGBNb25leVZhbHVlYCB3aXRoIGBoaWdoUHJlY2lzaW9uYCB3b3VsZCBiZVxuLy8gYGBgXG4vLyB7XG4vLyAgXCJ0eXBlXCI6IFwiaGlnaFByZWNpc2lvblwiLFxuLy8gIFwiY3VycmVuY3lDb2RlXCI6IFwiRVVSXCIsXG4vLyAgXCJjZW50QW1vdW50XCI6IDEsXG4vLyAgXCJwcmVjaXNlQW1vdW50XCI6IDEyMzQ1Nixcbi8vICBcImZyYWN0aW9uRGlnaXRzXCI6IDdcbi8vIH1cbi8vIGBgYFxuLy8gd2hpY2ggZXF1YWxzIGBFVVIgMC4wMTIzNDU2YFxuXG4vLyBQYXJzaW5nXG4vLyBTaW5jZSBtb3N0IHVzZXJzIGFyZSBub3QgY2FyZWZ1bCBhYm91dCBob3cgdGhleSBlbnRlciB2YWx1ZXMsIHdlIHdpbGwgcGFyc2Vcbi8vIGJvdGggYC5gIGFuZCBgLGAgYXMgZGVjaW1hbCBzZXBhcmF0b3JzLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLjAwMCwwMGAgd2UgcGFyc2UgaXQgYXMgYDEwMDBgLlxuLy8gV2hlbiBhIHZhbHVlIGlzIGAxLDAwMC4wMGAgd2UgYWxzbyBwYXJzZSBpdCBhcyBgMTAwMGAuXG4vL1xuLy8gVGhpcyBtZWFucyB0aGUgaGlnaGVzdCBhbW91bnQgYWx3YXlzIHdpbnMuIFdlIGRvIHRoaXMgYnkgY29tcGFyaW5nIHRoZSBsYXN0XG4vLyBwb3NpdGlvbiBvZiBgLmAgYW5kIGAsYC4gV2hhdGV2ZXIgb2NjdXJzIGxhdGVyIGlzIHVzZWQgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuZXhwb3J0IGNvbnN0IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIgPSAocmF3QW1vdW50OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gIGxldCBmcmFjdGlvbnNTZXBhcmF0b3I7XG5cbiAgaWYgKGxvY2FsZSkge1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9ICgyLjUpIC8vIHdlIG5lZWQgYW55IG51bWJlciB3aXRoIGZyYWN0aW9ucywgc28gdGhhdCB3ZSBrbm93IHdoYXQgaXMgdGhlIGZyYWN0aW9uXG4gICAgICAudG9Mb2NhbGVTdHJpbmcobG9jYWxlKSAvLyBcInN5bWJvbFwiIGZvciB0aGUgcHJvdmlkZWQgbG9jYWxlXG4gICAgICAucmVwbGFjZSgvXFxkL2csICcnKTsgLy8gdGhlbiB3ZSByZW1vdmUgdGhlIG51bWJlcnMgYW5kIGtlZXAgdGhlIFwic3ltYm9sXCJcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0RG90ID0gU3RyaW5nKHJhd0Ftb3VudCkubGFzdEluZGV4T2YoJy4nKTtcbiAgICBjb25zdCBsYXN0Q29tbWEgPSBTdHJpbmcocmF3QW1vdW50KS5sYXN0SW5kZXhPZignLCcpO1xuICAgIGZyYWN0aW9uc1NlcGFyYXRvciA9IGxhc3RDb21tYSA+IGxhc3REb3QgPyAnLCcgOiAnLic7XG4gIH1cbiAgZnJhY3Rpb25zU2VwYXJhdG9yID0gZnJhY3Rpb25zU2VwYXJhdG9yID09PSAnLicgPyAnXFxcXC4nIDogZnJhY3Rpb25zU2VwYXJhdG9yOyAvLyBoZXJlIHdlIGVzY2FwZSB0aGUgJy4nIHRvIHVzZSBpdCBhcyByZWdleFxuICAvLyBUaGUgcmF3IGFtb3VudCB3aXRoIG9ubHkgb25lIHNwYXJhdG9yXG4gIGNvbnN0IG5vcm1hbGl6ZWRBbW91bnQgPSBTdHJpbmcocmF3QW1vdW50KVxuICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFteLTAtOSR7ZnJhY3Rpb25zU2VwYXJhdG9yfV1gLCAnZycpLCAnJykgLy8gd2UganVzdCBrZWVwIHRoZSBudW1iZXJzIGFuZCB0aGUgZnJhY3Rpb24gc3ltYm9sXG4gICAgLnJlcGxhY2UoZnJhY3Rpb25zU2VwYXJhdG9yLCAnLicpOyAvLyB0aGVuIHdlIGNoYW5nZSB3aGF0ZXZlciBgZnJhY3Rpb25zU2VwYXJhdG9yYCB3YXMgdG8gYC5gIHNvIHdlIGNhbiBwYXJzZSBpdCBhcyBmbG9hdFxuXG4gIHJldHVybiBwYXJzZUZsb2F0KG5vcm1hbGl6ZWRBbW91bnQpO1xufTtcblxuLy8gVHVybnMgdGhlIHVzZXIgaW5wdXQgaW50byBhIHZhbHVlIHRoZSBNb25leUlucHV0IGNhbiBwYXNzIHVwIHRocm91Z2ggb25DaGFuZ2Vcbi8vIEluIGNhc2UgdGhlIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgY29udGFpbmVkIGluIFwiYW1vdW50XCIgZXhjZWVkcyB0aGVcbi8vIG51bWJlciBvZiBmcmFjdGlvbiBkaWdpdHMgdGhlIGN1cnJlbmN5IHVzZXMsIGl0IHdpbGwgZW1pdCBhIHByaWNlIG9mXG4vLyB0eXBlIFwiaGlnaFByZWNpc2lvblwiIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgXCJjZW50UHJlY2lzaW9uXCIuXG4vLyBJdCB3aWxsIHJldHVybiBcIm51bGxcIiBpbiBjYXNlIGFuIGludmFsaWQgdmFsdWUgaXMgZW50ZXJlZC5cbi8vIFRoZSB2YWx1ZSBpcyBpbnZhbGlkIHdoZW5cbi8vICAtIG5vIGFtb3VudCB3YXMgZW50ZXJlZFxuLy8gIC0gYW4gaW52YWxpZCBhbW91bnQgd2FzIGVudGVyZWRcbi8vICAtIG5vIGN1cnJlbmN5IHdhcyBzZWxlY3RlZFxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgXCJhbW91bnRcIiB0byBiZSBhIHRyaW1tZWQgdmFsdWUuXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb25leVZhbHVlID0gKFxuICByYXdBbW91bnQ6IHN0cmluZyxcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGN1cnJlbmN5Q29kZT86IFRDdXJyZW5jeUNvZGUgfCAnJ1xuKTogVE1vbmV5VmFsdWUgfCBudWxsID0+IHtcbiAgaWYgKCFjdXJyZW5jeUNvZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGN1cnJlbmN5ID0gYWxsQ3VycmVuY2llc1tjdXJyZW5jeUNvZGVdO1xuICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgLy8gVGhlIHVzZXIgbWF5IGVudGVyIGEgdmFsdWUgd2l0aCBhIGNvbW1hLCBkb3QsIG9yIGFwb3N0cm9waGUgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLlxuICBpZiAocmF3QW1vdW50Lmxlbmd0aCA9PT0gMCB8fCAhaXNOdW1iZXJpc2gocmF3QW1vdW50KSkgcmV0dXJuIG51bGw7XG5cbiAgd2FybmluZyhcbiAgICBsb2NhbGUgfHwgY3VycmVuY3kuZnJhY3Rpb25EaWdpdHMgIT09IDAsXG4gICAgYE1vbmV5SW5wdXQ6IEEgbG9jYWxlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBjdXJyZW5jeSBoYXMgbm8gZnJhY3Rpb24gZGlnaXRzICgke2N1cnJlbmN5Q29kZX0pYFxuICApO1xuICBjb25zdCBhbW91bnRBc051bWJlciA9IHBhcnNlUmF3QW1vdW50VG9OdW1iZXIocmF3QW1vdW50LCBsb2NhbGUpO1xuICBpZiAoaXNOYU4oYW1vdW50QXNOdW1iZXIpKSByZXR1cm4gbnVsbDtcblxuICAvLyBUaGUgY2VudCBhbW91bnQgaXMgcm91bmRlZCB0byB0aGUgY3VycmVuY2llJ3MgZGVmYXVsdCBudW1iZXJcbiAgLy8gb2YgZnJhY3Rpb24gZGlnaXRzIGZvciBwcmljZXMgd2l0aCBoaWdoIHByZWNpc2lvbi5cbiAgLy9cbiAgLy8gQWRkaXRpb25hbGx5LCBKYXZhU2NyaXB0IGlzIHNvbWV0aW1lcyBpbmNvcnJlY3Qgd2hlbiBtdWx0aXBseWluZyBmbG9hdHMsXG4gIC8vICAgZS5nLiAyLjQ5ICogMTAwIC0+IDI0OS4wMDAwMDAwMDAwMDAwM1xuICAvLyBXaGlsZSBpbmFjY3VyYWN5IGZyb20gbXVsdGlwbHlpbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBpcyBhXG4gIC8vIGdlbmVyYWwgcHJvYmxlbSBpbiBKUywgd2UgY2FuIGF2b2lkIGl0IGJ5IGN1dHRpbmcgb2ZmIGFsbFxuICAvLyBkZWNpbWFscy4gVGhpcyBpcyBwb3NzaWJsZSBzaW5jZSBjZW50cyBpcyB0aGUgYmFzZSB1bml0LCBzbyB3ZVxuICAvLyBvcGVyYXRlIG9uIGludGVnZXJzIGFueXdheXNcbiAgLy8gQWxzbyB3ZSBzaG91bGQgdGhlIHJvdW5kIHRoZSB2YWx1ZSB0byBlbnN1cmUgdGhhdCB3ZSBjb21lIGNsb3NlXG4gIC8vIHRvIHRoZSBuZWFyZXN0IGRlY2ltYWwgdmFsdWVcbiAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vY29tbWVyY2V0b29scy9tZXJjaGFudC1jZW50ZXItZnJvbnRlbmQvcHVsbC83NzBcbiAgY29uc3QgY2VudEFtb3VudCA9IE1hdGgudHJ1bmMoXG4gICAgTWF0aC5yb3VuZChhbW91bnRBc051bWJlciAqIDEwICoqIGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKVxuICApO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQgPVxuICAgIC8vIFRoZSBjb252ZXJzaW9uIHRvIGEgc3RyaW5nIHdpbGwgYWx3YXlzIHVzZSBhIGRvdCBhcyB0aGUgc2VwYXJhdG9yLlxuICAgIC8vIFRoYXQgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgYSBjb21tYS5cbiAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmluZGV4T2YoJy4nKSA9PT0gLTFcbiAgICAgID8gMFxuICAgICAgOiBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLmxlbmd0aCAtIFN0cmluZyhhbW91bnRBc051bWJlcikuaW5kZXhPZignLicpIC0gMTtcblxuICBpZiAoZnJhY3Rpb25EaWdpdHNPZkFtb3VudCA+IGN1cnJlbmN5LmZyYWN0aW9uRGlnaXRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdoaWdoUHJlY2lzaW9uJyxcbiAgICAgIGN1cnJlbmN5Q29kZSxcbiAgICAgIGNlbnRBbW91bnQsXG4gICAgICBwcmVjaXNlQW1vdW50OiBwYXJzZUludChcbiAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIGNvbnZlcnQgIGEgbnVtYmVyIGxpa2UgOC4wNjY2NTIgdG8gaXRzIGNlbnRhbW91bnRcbiAgICAgICAgLy8gV2UgY291bGQgZG8gdGhhdCBieSBtdWx0aXBseWluZyBpdCB3aXRoIDEwICoqIG51bWJlci1vZi1mcmFjdGlvbi1kaWdpdHNcbiAgICAgICAgLy8gYnV0IHRoZW4gd2UnbGwgcnVuIGludG8gcHJvYmxlbXMgd2l0aCBKYXZhU2NyaXB0J3MgZmxvYXRpbmcgcG9pbnRcbiAgICAgICAgLy8gbnVtYmVyIHByZWNpc2lvbiBhbmQgZW5kIHVwIHdpdGggODA2NjY1MS45OTk5OTk5LCBhbmQgdGhlbiBwYXJzZUludFxuICAgICAgICAvLyBjdXRzIG9mZiB0aGUgcmVtYWluZGVyLlxuICAgICAgICAvLyBTbyBpbnN0ZWFkIG9mIHVzaW5nIG1hdGhzIHRvIGNvbnZlcnQgdGhlIG51bWJlciwgd2UganVzdCByZXBsYWNlXG4gICAgICAgIC8vIHRoZSBkb3QgaW5zaWRlIHRoZSBudW1iZXIgd2hpY2ggZG9lcyB0aGUgc2FtZSB0aGluZy5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIFwiLFwiIGFzIHdlbGwsIGFzIG51bWJlcnMgYWx3YXlzIHVzIGEgZG90XG4gICAgICAgIC8vIHdoZW4gY29udmVydGVkIHVzaW5nIFN0cmluZygpLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgbWF0aGVtYXRpY2FsIHdheTogYW1vdW50QXNOdW1iZXIgKiAxMCAqKiBmcmFjdGlvbkRpZ2l0c09mQW1vdW50LFxuICAgICAgICBTdHJpbmcoYW1vdW50QXNOdW1iZXIpLnJlcGxhY2UoJy4nLCAnJyksXG4gICAgICAgIDEwXG4gICAgICApLFxuICAgICAgZnJhY3Rpb25EaWdpdHM6IGZyYWN0aW9uRGlnaXRzT2ZBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICAgIGN1cnJlbmN5Q29kZSxcbiAgICBjZW50QW1vdW50LFxuICAgIGZyYWN0aW9uRGlnaXRzOiBjdXJyZW5jeS5mcmFjdGlvbkRpZ2l0cyxcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVFbXB0eU1vbmV5VmFsdWUgPSAoY3VycmVuY3lDb2RlOiBUQ3VycmVuY3lDb2RlKTogVE1vbmV5VmFsdWUgPT4gKHtcbiAgdHlwZTogJ2NlbnRQcmVjaXNpb24nLFxuICBjdXJyZW5jeUNvZGUsXG4gIGNlbnRBbW91bnQ6IE5hTixcbiAgZnJhY3Rpb25EaWdpdHM6IDIsXG59KTtcblxuY29uc3QgZ2V0QW1vdW50QXNOdW1iZXJGcm9tTW9uZXlWYWx1ZSA9IChtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSkgPT5cbiAgbW9uZXlWYWx1ZS50eXBlID09PSAnaGlnaFByZWNpc2lvbidcbiAgICA/IG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCAvIDEwICoqIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHNcbiAgICA6IG1vbmV5VmFsdWUuY2VudEFtb3VudCAvXG4gICAgICAxMCAqKiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuLy8gZ2V0cyBjYWxsZWQgd2l0aCBhIHN0cmluZyBhbmQgc2hvdWxkIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmdcbmNvbnN0IGZvcm1hdEFtb3VudCA9IChcbiAgcmF3QW1vdW50OiBzdHJpbmcsXG4gIGxvY2FsZTogc3RyaW5nLFxuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGVcbikgPT4ge1xuICAvLyBmYWxsYmFjayBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCBlbnRlciBhbiBhbW91bnQgeWV0IChvciBpdCdzIGludmFsaWQpXG4gIGNvbnN0IG1vbmV5VmFsdWUgPVxuICAgIGNyZWF0ZU1vbmV5VmFsdWUocmF3QW1vdW50LCBsb2NhbGUsIGN1cnJlbmN5Q29kZSkgfHxcbiAgICBjcmVhdGVFbXB0eU1vbmV5VmFsdWUoY3VycmVuY3lDb2RlKTtcblxuICBjb25zdCBhbW91bnQgPSBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpO1xuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gbW9uZXlWYWx1ZS5wcmVjaXNlQW1vdW50XG4gICAgPyBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzXG4gICAgOiBhbGxDdXJyZW5jaWVzW21vbmV5VmFsdWUuY3VycmVuY3lDb2RlXS5mcmFjdGlvbkRpZ2l0cztcblxuICByZXR1cm4gaXNOYU4oYW1vdW50KVxuICAgID8gJydcbiAgICA6IGFtb3VudC50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBmcmFjdGlvbkRpZ2l0cyB9KTtcbn07XG5cbmNvbnN0IGdldEFtb3VudElucHV0TmFtZSA9IChuYW1lPzogc3RyaW5nKSA9PlxuICBuYW1lID8gYCR7bmFtZX0uYW1vdW50YCA6IHVuZGVmaW5lZDtcbmNvbnN0IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lID0gKG5hbWU/OiBzdHJpbmcpID0+XG4gIG5hbWUgPyBgJHtuYW1lfS5jdXJyZW5jeUNvZGVgIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBUVmFsdWUgPSB7XG4gIGFtb3VudDogc3RyaW5nO1xuICBjdXJyZW5jeUNvZGU6IFRDdXJyZW5jeUNvZGUgfCAnJztcbn07XG5cbnR5cGUgVEN1c3RvbUV2ZW50ID0ge1xuICB0YXJnZXQ6IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICB9O1xuICBwZXJzaXN0PzogKCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgVE1vbmV5SW5wdXRQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFVzZWQgYXMgSFRNTCBpZCBwcm9wZXJ0eS4gQW4gaWQgaXMgYXV0by1nZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2VkIGFzIEhUTUwgYGF1dG9jb21wbGV0ZWAgcHJvcGVydHlcbiAgICovXG4gIGF1dG9Db21wbGV0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEluZGljYXRlIGlmIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICAgKi9cbiAgJ2FyaWEtaW52YWxpZCc/OiBib29sZWFuO1xuICAvKipcbiAgICogSFRNTCBJRCBvZiBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYW4gZXJyb3IgbWVzc2FnZSByZWxhdGVkIHRvIHRoZSBpbnB1dC5cbiAgICovXG4gICdhcmlhLWVycm9ybWVzc2FnZSc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHVzZWQgdG8gY3JlYXRlIGEgSFRNTCBgbmFtZWAgcHJvcGVydHkgZm9yIHRoZSBhbW91bnQgaW5wdXQgZmllbGQgKGAke25hbWV9LmFtb3VudGApIGFuZCB0aGUgY3VycmVuY3kgZHJvcGRvd24gKGAke25hbWV9LmN1cnJlbmN5Q29kZWApLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBpbnB1dC4gQ29uc2lzdHMgb2YgdGhlIGN1cnJlbmN5IGNvZGUgYW5kIGFuIGFtb3VudC4gYGFtb3VudGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhbW91bnQuIEEgZG90IGhhcyB0byBiZSB1c2VkIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvci5cbiAgICovXG4gIHZhbHVlOiBUVmFsdWU7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHBvc3NpYmxlIGN1cnJlbmNpZXMuIFdoZW4gbm90IHByb3ZpZGVkIG9yIGVtcHR5LCB0aGUgY29tcG9uZW50IHJlbmRlcnMgYSBsYWJlbCB3aXRoIHRoZSB2YWx1ZSdzIGN1cnJlbmN5IGluc3RlYWQgb2YgYSBkcm9wZG93bi5cbiAgICovXG4gIGN1cnJlbmNpZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBpbnB1dFxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dCBpcyBibHVycmVkXG4gICAqL1xuICBvbkJsdXI/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGlucHV0IGlzIGZvY3VzZWRcbiAgICovXG4gIG9uRm9jdXM/OiAoZXZlbnQ6IFRDdXN0b21FdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlZHVjZSB0aGUgcGFkZGluZ3Mgb2YgdGhlIGNvbXBvbmVudCBmb3IgYSB1aSBjb21wYWN0IHZhcmlhbnRcbiAgICovXG4gIGlzQ29uZGVuc2VkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBjYW5ub3QgYmUgbW9kaWZpZWQgKGUuZyBub3QgYXV0aG9yaXplZCwgb3IgY2hhbmdlcyBjdXJyZW50bHkgc2F2aW5nKS5cbiAgICovXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkIGlzIGRpc3BsYXlpbmcgcmVhZC1vbmx5IGNvbnRlbnRcbiAgICovXG4gIGlzUmVhZE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogRm9jdXMgdGhlIGlucHV0IG9uIGluaXRpYWwgcmVuZGVyXG4gICAqL1xuICBpc0F1dG9mb2N1c3NlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsZWQgd2l0aCB0aGUgZXZlbnQgb2YgdGhlIGlucHV0IG9yIGRyb3Bkb3duIHdoZW4gZWl0aGVyIHRoZSBjdXJyZW5jeSBvciB0aGUgYW1vdW50IGhhdmUgY2hhbmdlZC5cbiAgICovXG4gIG9uQ2hhbmdlPzogKGV2ZW50OiBUQ3VzdG9tRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBEb20gZWxlbWVudCB0byBwb3J0YWwgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHRvXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51UG9ydGFsVGFyZ2V0PzogUmVhY3RTZWxlY3RQcm9wc1snbWVudVBvcnRhbFRhcmdldCddO1xuICAvKipcbiAgICogei1pbmRleCB2YWx1ZSBmb3IgdGhlIGN1cnJlbmN5IHNlbGVjdCBtZW51IHBvcnRhbFxuICAgKiA8YnI+XG4gICAqIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGBtZW51UG9ydGFsVGFyZ2V0YFxuICAgKi9cbiAgbWVudVBvcnRhbFpJbmRleD86IG51bWJlcjtcbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhlIG1lbnUgc2hvdWxkIGJsb2NrIHNjcm9sbCB3aGlsZSBvcGVuXG4gICAqIDxicj5cbiAgICogW1Byb3BzIGZyb20gUmVhY3Qgc2VsZWN0IHdhcyB1c2VkXShodHRwczovL3JlYWN0LXNlbGVjdC5jb20vcHJvcHMpXG4gICAqL1xuICBtZW51U2hvdWxkQmxvY2tTY3JvbGw/OiBSZWFjdFNlbGVjdFByb3BzWydtZW51U2hvdWxkQmxvY2tTY3JvbGwnXTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IGlucHV0IGhhcyBlcnJvcnNcbiAgICovXG4gIGhhc0Vycm9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2wgdG8gaW5kaWNhdGUgb24gdGhlIGlucHV0IGlmIHRoZXJlIGFyZSBzZWxlY3RlZCB2YWx1ZXMgdGhhdCBhcmUgcG90ZW50aWFsbHkgaW52YWxpZFxuICAgKi9cbiAgaGFzV2FybmluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG93cyBoaWdoIHByZWNpc2lvbiBiYWRnZSBpbiBjYXNlIGN1cnJlbnQgdmFsdWUgdXNlcyBoaWdoIHByZWNpc2lvbi5cbiAgICovXG4gIGhhc0hpZ2hQcmVjaXNpb25CYWRnZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHNpemUgbGltaXQgb2YgdGhlIGlucHV0IGZpZWxkcy5cbiAgICovXG4gIGhvcml6b250YWxDb25zdHJhaW50PzpcbiAgICB8IDNcbiAgICB8IDRcbiAgICB8IDVcbiAgICB8IDZcbiAgICB8IDdcbiAgICB8IDhcbiAgICB8IDlcbiAgICB8IDEwXG4gICAgfCAxMVxuICAgIHwgMTJcbiAgICB8IDEzXG4gICAgfCAxNFxuICAgIHwgMTVcbiAgICB8IDE2XG4gICAgfCAnc2NhbGUnXG4gICAgfCAnYXV0byc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVuY3kgaW5wdXQgY2Fubm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgaXNDdXJyZW5jeUlucHV0RGlzYWJsZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgTW9uZXlJbnB1dCA9ICh7XG4gIGN1cnJlbmNpZXMgPSBbXSxcbiAgaG9yaXpvbnRhbENvbnN0cmFpbnQgPSAnc2NhbGUnLFxuICBtZW51UG9ydGFsWkluZGV4ID0gMSxcbiAgLi4ucHJvcHNcbn06IFRNb25leUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW2N1cnJlbmN5SGFzRm9jdXMsIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXNdID0gdXNlVG9nZ2xlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYW1vdW50SGFzRm9jdXMsIHRvZ2dsZUFtb3VudEhhc0ZvY3VzXSA9IHVzZVRvZ2dsZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBhbW91bnRJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcblxuICBjb25zdCBtb25leUlucHV0SWQgPSB1c2VGaWVsZElkKHByb3BzLmlkLCBtb25leUlucHV0U2VxdWVudGlhbElkKTtcblxuICBpZiAoIXByb3BzLmlzUmVhZE9ubHkpIHtcbiAgICB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ01vbmV5SW5wdXQ6IFwib25DaGFuZ2VcIiBpcyByZXF1aXJlZCB3aGVuIGlzIG5vdCByZWFkIG9ubHkuJ1xuICAgICk7XG4gIH1cblxuICB3YXJuSWZNZW51UG9ydGFsUHJvcHNBcmVNaXNzaW5nKHtcbiAgICBtZW51UG9ydGFsWkluZGV4OiBtZW51UG9ydGFsWkluZGV4LFxuICAgIG1lbnVQb3J0YWxUYXJnZXQ6IHByb3BzLm1lbnVQb3J0YWxUYXJnZXQsXG4gICAgY29tcG9uZW50TmFtZTogJ01vbmV5SW5wdXQnLFxuICB9KTtcblxuICBjb25zdCB7IG9uRm9jdXMgfSA9IHByb3BzO1xuICBjb25zdCBoYW5kbGVBbW91bnRGb2N1cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Gb2N1cylcbiAgICAgIG9uRm9jdXMoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXModHJ1ZSk7XG4gIH0sIFt0b2dnbGVBbW91bnRIYXNGb2N1cywgb25Gb2N1cywgbW9uZXlJbnB1dElkLCBwcm9wcy5uYW1lXSk7XG5cbiAgY29uc3QgeyBvbkNoYW5nZSB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUFtb3VudEJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgYW1vdW50ID0gcHJvcHMudmFsdWUuYW1vdW50LnRyaW0oKTtcbiAgICB0b2dnbGVBbW91bnRIYXNGb2N1cyhmYWxzZSk7XG4gICAgLy8gU2tpcCBmb3JtYXR0aW5nIGZvciBlbXB0eSB2YWx1ZSBvciB3aGVuIHRoZSBpbnB1dCBpcyB1c2VkIHdpdGggYW5cbiAgICAvLyB1bmtub3duIGN1cnJlbmN5LlxuICAgIGlmIChcbiAgICAgIGFtb3VudC5sZW5ndGggPiAwICYmXG4gICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUgJiZcbiAgICAgIGFsbEN1cnJlbmNpZXNbcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlXVxuICAgICkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkQW1vdW50ID0gZm9ybWF0QW1vdW50KFxuICAgICAgICBhbW91bnQsXG4gICAgICAgIGludGwubG9jYWxlLFxuICAgICAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGVcbiAgICAgICk7XG5cbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgZW50ZXJlZCBhIHZhbHVlIHdpdGggY2VudFByZWNpc2lvbiwgd2UgY2FuIGZvcm1hdFxuICAgICAgLy8gdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0aGF0IGN1cnJlbmN5LCBlLmcuIDIwLjEgdG8gMjAuMTBcbiAgICAgIGlmIChTdHJpbmcoZm9ybWF0dGVkQW1vdW50KSAhPT0gYW1vdW50KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBhbiBldmVudCB3aXRoIHRoZSBub3cgZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgIGNvbnN0IGZha2VFdmVudCA9IHtcbiAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEFtb3VudElucHV0SWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBmb3JtYXR0ZWRBbW91bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2U/LihmYWtlRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGludGwubG9jYWxlLFxuICAgIG9uQ2hhbmdlLFxuICAgIG1vbmV5SW5wdXRJZCxcbiAgICBwcm9wcy5uYW1lLFxuICAgIHByb3BzLnZhbHVlLmFtb3VudCxcbiAgICBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgdG9nZ2xlQW1vdW50SGFzRm9jdXMsXG4gIF0pO1xuXG4gIGNvbnN0IGhhbmRsZUFtb3VudENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2hhbmdlRXZlbnQgfCBGb2N1c0V2ZW50KSA9PiB7XG4gICAgICBpZiAoaXNOdW1iZXJpc2goKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWUpKSB7XG4gICAgICAgIG9uQ2hhbmdlPy4oe1xuICAgICAgICAgIHBlcnNpc3Q6ICgpID0+IHt9LFxuICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgaWQ6IE1vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0QW1vdW50SW5wdXROYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiB7IHZhbHVlOiBUQ3VycmVuY3lDb2RlIH0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbmN5Q29kZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgIGlmIChwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUgIT09IGN1cnJlbmN5Q29kZSkge1xuICAgICAgICAvLyBXaGVuIHRoZSB1c2VyIGNoYW5nZXMgZnJvbSBhIGN1cnJlbmN5IHdpdGggMyBmcmFjdGlvbiBkaWdpdHMgdG9cbiAgICAgICAgLy8gYSBjdXJyZW5jeSB3aXRoIDIgZnJhY3Rpb24gZGlnaXRzLCBhbmQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgd2FzXG4gICAgICAgIC8vIFwiOS4wMDBcIiAoOSksIHRoZW4gaXQgc2hvdWxkIGNoYW5nZSB0byBcIjkuMDBcIiB0byByZWZsZWN0IHRoZSBuZXdcbiAgICAgICAgLy8gY3VycmVuY3kncyBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzLlxuICAgICAgICAvLyBXaGVuIHRoZSBjdXJyZW5jeSB3YXMgYSBoaWdoLXByZWNpc2lvbiBwcmljZSwgdGhlbiBubyBkaWdpdHMgc2hvdWxkXG4gICAgICAgIC8vIGJlIGxvc3RcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkQW1vdW50ID0gZm9ybWF0QW1vdW50KFxuICAgICAgICAgIHByb3BzLnZhbHVlLmFtb3VudC50cmltKCksXG4gICAgICAgICAgaW50bC5sb2NhbGUsXG4gICAgICAgICAgY3VycmVuY3lDb2RlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRoZSB1c2VyIGNvdWxkIGJlIGNoYW5naW5nIHRoZSBjdXJyZW5jeSBiZWZvcmUgZW50ZXJpbmcgYW55IGFtb3VudCxcbiAgICAgICAgLy8gb3Igd2hpbGUgdGhlIGFtb3VudCBpcyBpbnZhbGlkLiBJbiB0aGVzZSBjYXNlcywgd2UgZG9uJ3QgYXR0ZW1wdCB0b1xuICAgICAgICAvLyBmb3JtYXQgdGhlIGFtb3VudC5cbiAgICAgICAgY29uc3QgbmV4dEFtb3VudCA9IGlzTmFOKE51bWJlcihmb3JtYXR0ZWRBbW91bnQpKVxuICAgICAgICAgID8gcHJvcHMudmFsdWUuYW1vdW50XG4gICAgICAgICAgOiBmb3JtYXR0ZWRBbW91bnQ7XG5cbiAgICAgICAgLy8gY2hhbmdlIGN1cnJlbmN5IGNvZGVcbiAgICAgICAgY29uc3QgZmFrZUN1cnJlbmN5RXZlbnQgPSB7XG4gICAgICAgICAgcGVyc2lzdDogKCkgPT4ge30sXG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRDdXJyZW5jeURyb3Bkb3duSWQobW9uZXlJbnB1dElkKSxcbiAgICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbmN5Q29kZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZT8uKGZha2VDdXJyZW5jeUV2ZW50KTtcblxuICAgICAgICAvLyBjaGFuZ2UgYW1vdW50IGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAocHJvcHMudmFsdWUuYW1vdW50ICE9PSBuZXh0QW1vdW50KSB7XG4gICAgICAgICAgb25DaGFuZ2U/Lih7XG4gICAgICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICAgIG5hbWU6IGdldEFtb3VudElucHV0TmFtZShwcm9wcy5uYW1lKSxcbiAgICAgICAgICAgICAgdmFsdWU6IG5leHRBbW91bnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYW1vdW50SW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGludGwubG9jYWxlLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBtb25leUlucHV0SWQsXG4gICAgICBwcm9wcy5uYW1lLFxuICAgICAgcHJvcHMudmFsdWUuYW1vdW50LFxuICAgICAgcHJvcHMudmFsdWUuY3VycmVuY3lDb2RlLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDdXJyZW5jeUZvY3VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvbkZvY3VzKVxuICAgICAgb25Gb2N1cyh7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgIG5hbWU6IGdldEN1cnJlbmN5RHJvcGRvd25OYW1lKHByb3BzLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICB0b2dnbGVDdXJyZW5jeUhhc0ZvY3VzKHRydWUpO1xuICB9LCBbb25Gb2N1cywgdG9nZ2xlQ3VycmVuY3lIYXNGb2N1cywgcHJvcHMubmFtZSwgbW9uZXlJbnB1dElkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ3VycmVuY3lCbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUN1cnJlbmN5SGFzRm9jdXMoZmFsc2UpO1xuICB9LCBbdG9nZ2xlQ3VycmVuY3lIYXNGb2N1c10pO1xuXG4gIGNvbnN0IGhhc05vQ3VycmVuY2llcyA9IGN1cnJlbmNpZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBoYXNGb2N1cyA9IGN1cnJlbmN5SGFzRm9jdXMgfHwgYW1vdW50SGFzRm9jdXM7XG4gIGNvbnN0IGN1cnJlbmN5U2VsZWN0U3R5bGVzID0gY3JlYXRlQ3VycmVuY3lTZWxlY3RTdHlsZXMoe1xuICAgIGhhc1dhcm5pbmc6IHByb3BzLmhhc1dhcm5pbmcsXG4gICAgaGFzRXJyb3I6IHByb3BzLmhhc0Vycm9yLFxuICAgIGlzQ29uZGVuc2VkOiBwcm9wcy5pc0NvbmRlbnNlZCxcbiAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgIGlzUmVhZE9ubHk6IHByb3BzLmlzUmVhZE9ubHksXG4gICAgbWVudVBvcnRhbFpJbmRleDogbWVudVBvcnRhbFpJbmRleCxcbiAgICBjdXJyZW5jeUhhc0ZvY3VzLFxuICB9KTtcbiAgY29uc3Qgb3B0aW9ucyA9IGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeUNvZGUpID0+ICh7XG4gICAgbGFiZWw6IGN1cnJlbmN5Q29kZSxcbiAgICB2YWx1ZTogY3VycmVuY3lDb2RlLFxuICB9KSk7XG5cbiAgY29uc3Qgb3B0aW9uID0gKCgpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKFxuICAgICAgKG9wdGlvbkNhbmRpZGF0ZSkgPT4gb3B0aW9uQ2FuZGlkYXRlLnZhbHVlID09PSBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGVcbiAgICApO1xuICAgIGlmIChtYXRjaGVkT3B0aW9uKSByZXR1cm4gbWF0Y2hlZE9wdGlvbjtcbiAgICAvLyBlbnN1cmUgYW4gb3B0aW9uIGlzIGZvdW5kLCBldmVuIHdoZW4gdGhlIGN1cnJlbmNpZXMgZG9uJ3QgaW5jbHVkZVxuICAgIC8vIHRoZSBtb25leSB2YWx1ZSdzIGN1cnJlbmN5Q29kZVxuICAgIGlmIChwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUudHJpbSgpICE9PSAnJylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZS5jdXJyZW5jeUNvZGUsXG4gICAgICB9O1xuICAgIHJldHVybiBudWxsO1xuICB9KSgpO1xuXG4gIGNvbnN0IGlzSGlnaFByZWNpc2lvbiA9XG4gICAgIU1vbmV5SW5wdXQuaXNFbXB0eShwcm9wcy52YWx1ZSkgJiZcbiAgICBNb25leUlucHV0LmlzSGlnaFByZWNpc2lvbihwcm9wcy52YWx1ZSwgaW50bC5sb2NhbGUpO1xuXG4gIGNvbnN0IHsgb25CbHVyIH0gPSBwcm9wcztcbiAgY29uc3QgaGFuZGxlQ29udGFpbmVyQmx1ciA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogRm9jdXNFdmVudCkgPT4ge1xuICAgICAgLy8gZW5zdXJlcyB0aGF0IGJvdGggZmllbGRzIGFyZSBtYXJrZWQgYXMgdG91Y2hlZCB3aGVuIG9uZSBvZiB0aGVtXG4gICAgICAvLyBpcyBibHVycmVkXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBvbkJsdXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgIWNvbnRhaW5lclJlZi5jdXJyZW50Py5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0IGFzIE5vZGUpXG4gICAgICApIHtcbiAgICAgICAgb25CbHVyKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiBNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpLFxuICAgICAgICAgICAgbmFtZTogZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIG9uQmx1cih7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogTW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCksXG4gICAgICAgICAgICBuYW1lOiBnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25CbHVyLCBtb25leUlucHV0SWQsIHByb3BzLm5hbWVdXG4gICk7XG5cbiAgY29uc3QgVG9vbHRpcFBvcnRhbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZW1haW5pbmdQcm9wczogVFRvb2x0aXBQcm9wcyAmIHsgaWQ6IHN0cmluZyB9KSA9PiAoXG4gICAgICA8UG9ydGFsIHsuLi5yZW1haW5pbmdQcm9wc30gaWQ9e3Byb3BzLmlkIX0gLz5cbiAgICApLFxuICAgIFtwcm9wcy5pZF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDb25zdHJhaW50cy5Ib3Jpem9udGFsIG1heD17aG9yaXpvbnRhbENvbnN0cmFpbnR9PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGB9XG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9uZXktaW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgb25CbHVyPXsoZXZlbnQpID0+XG4gICAgICAgICAgaGFuZGxlQ29udGFpbmVyQmx1cihldmVudCBhcyBGb2N1c0V2ZW50PEhUTUxEaXZFbGVtZW50PilcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICB7aGFzTm9DdXJyZW5jaWVzID8gKFxuICAgICAgICAgIDxDdXJyZW5jeUxhYmVsXG4gICAgICAgICAgICBpZD17TW9uZXlJbnB1dC5nZXRBbW91bnRJbnB1dElkKG1vbmV5SW5wdXRJZCkgYXMgc3RyaW5nfVxuICAgICAgICAgICAgaXNDb25kZW5zZWQ9e3Byb3BzLmlzQ29uZGVuc2VkfVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17cHJvcHMuaXNEaXNhYmxlZH1cbiAgICAgICAgICAgIGlzUmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbiAmJiBvcHRpb24ubGFiZWx9XG4gICAgICAgICAgPC9DdXJyZW5jeUxhYmVsPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGlucHV0SWQ9e01vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkKG1vbmV5SW5wdXRJZCl9XG4gICAgICAgICAgICBuYW1lPXtnZXRDdXJyZW5jeURyb3Bkb3duTmFtZShwcm9wcy5uYW1lKX1cbiAgICAgICAgICAgIHZhbHVlPXtvcHRpb259XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtwcm9wcy5pc0N1cnJlbmN5SW5wdXREaXNhYmxlZCB8fCBwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgaXNTZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgU2luZ2xlVmFsdWU6IChpbm5lclByb3BzKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8U2luZ2xlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgey4uLmlubmVyUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGlkPXtNb25leUlucHV0LmdldEN1cnJlbmN5RHJvcGRvd25JZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIElucHV0OiAob3duUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgIDxjb21wb25lbnRzLklucHV0IHsuLi5vd25Qcm9wc30gcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9IC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBEcm9wZG93bkluZGljYXRvcjogcHJvcHMuaXNDdXJyZW5jeUlucHV0RGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgOiBEcm9wZG93bkluZGljYXRvcixcbiAgICAgICAgICAgICAgfSBhcyBSZWFjdFNlbGVjdFByb3BzWydjb21wb25lbnRzJ11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICBtZW51SXNPcGVuPXtwcm9wcy5pc1JlYWRPbmx5ID8gZmFsc2UgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgICAgICBzdHlsZXM9e2N1cnJlbmN5U2VsZWN0U3R5bGVzIGFzIFJlYWN0U2VsZWN0UHJvcHNbJ3N0eWxlcyddfVxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlQ3VycmVuY3lGb2N1c31cbiAgICAgICAgICAgIG1lbnVQb3J0YWxUYXJnZXQ9e3Byb3BzLm1lbnVQb3J0YWxUYXJnZXR9XG4gICAgICAgICAgICBtZW51U2hvdWxkQmxvY2tTY3JvbGw9e3Byb3BzLm1lbnVTaG91bGRCbG9ja1Njcm9sbH1cbiAgICAgICAgICAgIG1lbnVQbGFjZW1lbnQ9XCJhdXRvXCJcbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQ3VycmVuY3lCbHVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUN1cnJlbmN5Q2hhbmdlIGFzIFJlYWN0U2VsZWN0UHJvcHNbJ29uQ2hhbmdlJ119XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImN1cnJlbmN5LWRyb3Bkb3duXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZWY9e2Ftb3VudElucHV0UmVmfVxuICAgICAgICAgICAgaWQ9e01vbmV5SW5wdXQuZ2V0QW1vdW50SW5wdXRJZChtb25leUlucHV0SWQpfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPXtwcm9wcy5hdXRvQ29tcGxldGV9XG4gICAgICAgICAgICBuYW1lPXtnZXRBbW91bnRJbnB1dE5hbWUocHJvcHMubmFtZSl9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVBbW91bnRGb2N1c31cbiAgICAgICAgICAgIHZhbHVlPXtwcm9wcy52YWx1ZS5hbW91bnR9XG4gICAgICAgICAgICBjc3M9e1tcbiAgICAgICAgICAgICAgZ2V0QW1vdW50SW5wdXRTdHlsZXMoeyAuLi5wcm9wcywgaGFzRm9jdXMgfSksXG4gICAgICAgICAgICAgIC8vIGFjY291bnRzIGZvciBzaXplIG9mIGljb25cbiAgICAgICAgICAgICAgcHJvcHMuaGFzSGlnaFByZWNpc2lvbkJhZGdlICYmXG4gICAgICAgICAgICAgICAgaXNIaWdoUHJlY2lzaW9uICYmXG4gICAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzQwfTtcbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICBjdXJyZW5jeUhhc0ZvY3VzICYmXG4gICAgICAgICAgICAgICAgIXByb3BzLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMuaXNSZWFkT25seSAmJlxuICAgICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAke2Rlc2lnblRva2Vucy5ib3JkZXJDb2xvckZvcklucHV0V2hlbkZvY3VzZWR9O1xuICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUFtb3VudENoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQW1vdW50Qmx1cn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3Byb3BzLmlzUmVhZE9ubHl9XG4gICAgICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmlzQXV0b2ZvY3Vzc2VkfVxuICAgICAgICAgICAgey4uLmZpbHRlckRhdGFBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFpbnQsXG4gICAgICAgICAgICAgIG1lbnVQb3J0YWxaSW5kZXgsXG4gICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAvKiBBUklBICovXG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3Byb3BzWydhcmlhLWludmFsaWQnXX1cbiAgICAgICAgICAgIGFyaWEtZXJyb3JtZXNzYWdlPXtwcm9wc1snYXJpYS1lcnJvcm1lc3NhZ2UnXX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtwcm9wcy5oYXNIaWdoUHJlY2lzaW9uQmFkZ2UgJiYgaXNIaWdoUHJlY2lzaW9uICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHshcHJvcHMuaXNEaXNhYmxlZCAmJiA8ZGl2IGlkPXtnZXRQb3J0YWxJZChwcm9wcy5pZCl9IC8+fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgZ2V0SGlnaFByZWNpc2lvbldyYXBwZXJTdHlsZXMoe1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgb2ZmPXtwcm9wcy5pc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wLWVuZFwiXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgbmVnYXRpdmUgbWFyZ2luIHRvIG1ha2UgdXAgZm9yIHRoZSBwYWRkaW5nIGluIHRoZSBUb29sdGlwIFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRvb2x0aXAgaXMgZmx1c2ggd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBzdHlsZXM9e3tcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogYCR7ZGVzaWduVG9rZW5zLnNwYWNpbmcyMH0gLSR7ZGVzaWduVG9rZW5zLnNwYWNpbmcxMH0gJHtkZXNpZ25Ub2tlbnMuc3BhY2luZzIwfSAwYCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB0aXRsZT17aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmhpZ2hQcmVjaXNpb24pfVxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICAgICAgICAgICAgICBUb29sdGlwV3JhcHBlckNvbXBvbmVudDogVG9vbHRpcFBvcnRhbCBhcyBDb21wb25lbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBXcmFwcGVyQ29tcG9uZW50OiBUb29sdGlwV3JhcHBlcixcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEZyYWN0aW9uRGlnaXRzSWNvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuaXNEaXNhYmxlZCA/ICduZXV0cmFsNjAnIDogJ2luZm8nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnN0cmFpbnRzLkhvcml6b250YWw+XG4gICk7XG59O1xuXG5Nb25leUlucHV0LmRpc3BsYXlOYW1lID0gJ01vbmV5SW5wdXQnO1xuXG5Nb25leUlucHV0LmdldEFtb3VudElucHV0SWQgPSBnZXRBbW91bnRJbnB1dE5hbWU7XG5cbk1vbmV5SW5wdXQuZ2V0Q3VycmVuY3lEcm9wZG93bklkID0gZ2V0Q3VycmVuY3lEcm9wZG93bk5hbWU7XG5cbk1vbmV5SW5wdXQuY29udmVydFRvTW9uZXlWYWx1ZSA9ICh2YWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZykgPT5cbiAgY3JlYXRlTW9uZXlWYWx1ZShcbiAgICB0eXBlb2YgdmFsdWUuYW1vdW50ID09PSAnc3RyaW5nJyA/IHZhbHVlLmFtb3VudC50cmltKCkgOiAnJyxcbiAgICBsb2NhbGUsXG4gICAgdmFsdWUuY3VycmVuY3lDb2RlXG4gICk7XG5cbk1vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlID0gKFxuICBtb25leVZhbHVlOiBUTW9uZXlWYWx1ZSxcbiAgbG9jYWxlOiBzdHJpbmdcbik6IFRWYWx1ZSA9PiB7XG4gIGlmICghbW9uZXlWYWx1ZSkgcmV0dXJuIHsgY3VycmVuY3lDb2RlOiAnJywgYW1vdW50OiAnJyB9O1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBBIGxvY2FsZSBtdXN0IGJlIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50J1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgdHlwZW9mIG1vbmV5VmFsdWUgPT09ICdvYmplY3QnLFxuICAgICdNb25leUlucHV0LnBhcnNlTW9uZXlWYWx1ZTogVmFsdWUgbXVzdCBiZSBwYXNzZWQgYXMgYW4gb2JqZWN0IG9yIGJlIHVuZGVmaW5lZCdcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSA9PT0gJ3N0cmluZycsXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IGNvbnRhaW4gXCJjdXJyZW5jeUNvZGVcIidcbiAgKTtcblxuICB3YXJuaW5nKFxuICAgIGhhcyhhbGxDdXJyZW5jaWVzLCBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSksXG4gICAgJ01vbmV5SW5wdXQucGFyc2VNb25leVZhbHVlOiBWYWx1ZSBtdXN0IHVzZSBrbm93biBjdXJyZW5jeSBjb2RlJ1xuICApO1xuXG4gIHdhcm5pbmcoXG4gICAgLy8gaGlnaFByZWNpc2lvbiBvciBjZW50UHJlY2lzaW9uIHZhbHVlcyBtdXN0IGJlIHNldFxuICAgIHR5cGVvZiBtb25leVZhbHVlLmNlbnRBbW91bnQgPT09ICdudW1iZXInIHx8XG4gICAgICAodHlwZW9mIG1vbmV5VmFsdWUucHJlY2lzZUFtb3VudCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdHlwZW9mIG1vbmV5VmFsdWUuZnJhY3Rpb25EaWdpdHMgPT09ICdudW1iZXInKSxcbiAgICAnTW9uZXlJbnB1dC5wYXJzZU1vbmV5VmFsdWU6IFZhbHVlIG11c3QgY29udGFpbiBcImFtb3VudFwiJ1xuICApO1xuXG4gIGNvbnN0IGFtb3VudCA9IGZvcm1hdEFtb3VudChcbiAgICBnZXRBbW91bnRBc051bWJlckZyb21Nb25leVZhbHVlKG1vbmV5VmFsdWUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwge1xuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtb25leVZhbHVlLmZyYWN0aW9uRGlnaXRzLFxuICAgIH0pLFxuICAgIGxvY2FsZSxcbiAgICBtb25leVZhbHVlLmN1cnJlbmN5Q29kZVxuICApO1xuXG4gIHJldHVybiB7IGFtb3VudCwgY3VycmVuY3lDb2RlOiBtb25leVZhbHVlLmN1cnJlbmN5Q29kZSB9O1xufTtcblxuTW9uZXlJbnB1dC5pc0VtcHR5ID0gKGZvcm1WYWx1ZTogVFZhbHVlKSA9PlxuICAhZm9ybVZhbHVlIHx8XG4gIGZvcm1WYWx1ZS5hbW91bnQudHJpbSgpID09PSAnJyB8fFxuICBmb3JtVmFsdWUuY3VycmVuY3lDb2RlLnRyaW0oKSA9PT0gJyc7XG5cbk1vbmV5SW5wdXQuaXNIaWdoUHJlY2lzaW9uID0gKGZvcm1WYWx1ZTogVFZhbHVlLCBsb2NhbGU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB3YXJuaW5nKFxuICAgICFNb25leUlucHV0LmlzRW1wdHkoZm9ybVZhbHVlKSxcbiAgICAnTW9uZXlWYWx1ZS5pc0hpZ2hQcmVjaXNpb24gbWF5IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBtb25leSB2YWx1ZS4nXG4gICk7XG4gIGNvbnN0IG1vbmV5VmFsdWUgPSBNb25leUlucHV0LmNvbnZlcnRUb01vbmV5VmFsdWUoZm9ybVZhbHVlLCBsb2NhbGUpO1xuICByZXR1cm4gbW9uZXlWYWx1ZT8udHlwZSA9PT0gJ2hpZ2hQcmVjaXNpb24nO1xufTtcblxudHlwZSBUVG91Y2hlZCA9IHtcbiAgYW1vdW50PzogYm9vbGVhbjtcbiAgY3VycmVuY3lDb2RlPzogYm9vbGVhbjtcbn07XG5cbk1vbmV5SW5wdXQuaXNUb3VjaGVkID0gKHRvdWNoZWQ/OiBUVG91Y2hlZCkgPT5cbiAgQm9vbGVhbih0b3VjaGVkICYmIHRvdWNoZWQuY3VycmVuY3lDb2RlICYmIHRvdWNoZWQuYW1vdW50KTtcblxuZXhwb3J0IGRlZmF1bHQgTW9uZXlJbnB1dDtcbiJdfQ== */"],
1314
1294
  placeholder: props.placeholder,
1315
1295
  onChange: handleAmountChange,
1316
1296
  onBlur: handleAmountBlur,
@@ -1357,32 +1337,6 @@ const MoneyInput = _ref5 => {
1357
1337
  })
1358
1338
  });
1359
1339
  };
1360
- MoneyInput.propTypes = process.env.NODE_ENV !== "production" ? {
1361
- id: _pt__default["default"].string,
1362
- autoComplete: _pt__default["default"].string,
1363
- 'aria-invalid': _pt__default["default"].bool,
1364
- 'aria-errormessage': _pt__default["default"].string,
1365
- name: _pt__default["default"].string,
1366
- value: _pt__default["default"].shape({
1367
- amount: _pt__default["default"].string.isRequired,
1368
- currencyCode: _pt__default["default"].oneOfType([_pt__default["default"].any, _pt__default["default"].oneOf([''])]).isRequired
1369
- }).isRequired,
1370
- currencies: _pt__default["default"].arrayOf(_pt__default["default"].string),
1371
- placeholder: _pt__default["default"].string,
1372
- onBlur: _pt__default["default"].func,
1373
- onFocus: _pt__default["default"].func,
1374
- isCondensed: _pt__default["default"].bool,
1375
- isDisabled: _pt__default["default"].bool,
1376
- isReadOnly: _pt__default["default"].bool,
1377
- isAutofocussed: _pt__default["default"].bool,
1378
- onChange: _pt__default["default"].func,
1379
- menuPortalZIndex: _pt__default["default"].number,
1380
- hasError: _pt__default["default"].bool,
1381
- hasWarning: _pt__default["default"].bool,
1382
- hasHighPrecisionBadge: _pt__default["default"].bool,
1383
- horizontalConstraint: _pt__default["default"].oneOf([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 'scale', 'auto']),
1384
- isCurrencyInputDisabled: _pt__default["default"].bool
1385
- } : {};
1386
1340
  MoneyInput.displayName = 'MoneyInput';
1387
1341
  MoneyInput.getAmountInputId = getAmountInputName;
1388
1342
  MoneyInput.getCurrencyDropdownId = getCurrencyDropdownName;
@@ -1411,8 +1365,8 @@ MoneyInput.parseMoneyValue = (moneyValue, locale) => {
1411
1365
  };
1412
1366
  };
1413
1367
  MoneyInput.isEmpty = formValue => {
1414
- var _context9, _context10;
1415
- return !formValue || _trimInstanceProperty__default["default"](_context9 = formValue.amount).call(_context9) === '' || _trimInstanceProperty__default["default"](_context10 = formValue.currencyCode).call(_context10) === '';
1368
+ var _context9, _context0;
1369
+ return !formValue || _trimInstanceProperty__default["default"](_context9 = formValue.amount).call(_context9) === '' || _trimInstanceProperty__default["default"](_context0 = formValue.currencyCode).call(_context0) === '';
1416
1370
  };
1417
1371
  MoneyInput.isHighPrecision = (formValue, locale) => {
1418
1372
  process.env.NODE_ENV !== "production" ? utils.warning(!MoneyInput.isEmpty(formValue), 'MoneyValue.isHighPrecision may not be called with an empty money value.') : void 0;
@@ -1423,7 +1377,7 @@ MoneyInput.isTouched = touched => Boolean(touched && touched.currencyCode && tou
1423
1377
  var MoneyInput$1 = MoneyInput;
1424
1378
 
1425
1379
  // NOTE: This string will be replaced on build time with the package version.
1426
- var version = "19.26.0";
1380
+ var version = "20.0.0";
1427
1381
 
1428
1382
  exports["default"] = MoneyInput$1;
1429
1383
  exports.version = version;