@pie-element/math-inline 12.4.0-beta.1 → 12.4.0-beta.4

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.
package/lib/main.js CHANGED
@@ -9,7 +9,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
  var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
12
- var _mathInput = require("@pie-lib/math-input");
12
+ var _mathInputMathlive = require("@pie-lib/math-input-mathlive");
13
13
  var _renderUi = require("@pie-lib/render-ui");
14
14
  var _mathRendering = require("@pie-lib/math-rendering");
15
15
  var _styles = require("@mui/material/styles");
@@ -122,7 +122,7 @@ class Main extends _react.default.Component {
122
122
 
123
123
  if (el) {
124
124
  const answer = answers[answerId];
125
- (0, _mathInput.applyStaticMath)(el, answer && answer.value || '');
125
+ (0, _mathInputMathlive.applyStaticMath)(el, answer && answer.value || '');
126
126
  if (!model.view) {
127
127
  // for now, we're not going to be showing individual response correctness
128
128
  // TODO re-attach the classes once we are
@@ -306,7 +306,7 @@ class Main extends _react.default.Component {
306
306
  }, this.handleAnswerBlockDomUpdate);
307
307
  });
308
308
  (0, _defineProperty2.default)(this, "subFieldChanged", (name, subfieldValue) => {
309
- (0, _mathInput.updateSpans)();
309
+ (0, _mathInputMathlive.updateSpans)();
310
310
  if (name) {
311
311
  const scrollX = window.scrollX;
312
312
  const scrollY = window.scrollY;
@@ -411,7 +411,7 @@ class Main extends _react.default.Component {
411
411
  UNSAFE_componentWillMount() {
412
412
  if (typeof window !== 'undefined') {
413
413
  if (!registered) {
414
- (0, _mathInput.registerEmbed)('answerBlock', data => {
414
+ (0, _mathInputMathlive.registerEmbed)('answerBlock', data => {
415
415
  const classNames = getBlockClassNames();
416
416
  return {
417
417
  htmlString: `<div class="${classNames.blockContainer}">
@@ -590,7 +590,7 @@ class Main extends _react.default.Component {
590
590
  const studentPrintMode = printMode && !alwaysShowCorrect;
591
591
  const showRationale = rationale && ((0, _renderUi.hasText)(rationale) || (0, _renderUi.hasMedia)(rationale));
592
592
  const showTeacherInstructions = teacherInstructions && ((0, _renderUi.hasText)(teacherInstructions) || (0, _renderUi.hasMedia)(teacherInstructions));
593
- const printView = /*#__PURE__*/_react.default.createElement(PrintContainer, null, /*#__PURE__*/_react.default.createElement(_mathInput.mq.Static, {
593
+ const printView = /*#__PURE__*/_react.default.createElement(PrintContainer, null, /*#__PURE__*/_react.default.createElement(_mathInputMathlive.mq.Static, {
594
594
  className: "static-math",
595
595
  ref: mqStatic => {
596
596
  if (mqStatic) this.mqStatic = mqStatic;
@@ -694,12 +694,12 @@ class Main extends _react.default.Component {
694
694
  // marginTop: this.mqStatic && this.mqStatic.input.offsetHeight - 20,
695
695
  width: getKeyPadWidth(additionalKeys, equationEditor)
696
696
  }
697
- }, /*#__PURE__*/_react.default.createElement(_mathInput.HorizontalKeypad, {
697
+ }, /*#__PURE__*/_react.default.createElement(_mathInputMathlive.HorizontalKeypad, {
698
698
  additionalKeys: additionalKeys,
699
699
  mode: equationEditor || DEFAULT_KEYPAD_VARIANT,
700
700
  onClick: this.onClick
701
701
  })) || null)
702
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_mathInput.mq.Static, {
702
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_mathInputMathlive.mq.Static, {
703
703
  className: "static-math",
704
704
  ref: mqStatic => {
705
705
  if (mqStatic) this.mqStatic = mqStatic;
@@ -1027,4 +1027,4 @@ const StyledCorrectAnswerToggle = (0, _styles.styled)(_correctAnswerToggle.defau
1027
1027
  marginBottom: theme.spacing(2)
1028
1028
  }));
1029
1029
  var _default = exports.default = Main;
1030
- //# sourceMappingURL=main.js.map
1030
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfY29ycmVjdEFuc3dlclRvZ2dsZSIsIl9tYXRoSW5wdXRNYXRobGl2ZSIsIl9yZW5kZXJVaSIsIl9tYXRoUmVuZGVyaW5nIiwiX3N0eWxlcyIsIl9Ub29sdGlwIiwiX3V0aWxzIiwiX2xvZGFzaEVzIiwiX3NpbXBsZVF1ZXN0aW9uQmxvY2siLCJfdHJhbnNsYXRvciIsIl9yZWFjdERvbSIsInRyYW5zbGF0b3IiLCJUcmFuc2xhdG9yIiwicmVnaXN0ZXJlZCIsIk5FV0xJTkVfTEFURVgiLCJSRUdFWCIsIkRFRkFVTFRfS0VZUEFEX1ZBUklBTlQiLCJJU19TQUZBUkkiLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiZ2VuZXJhdGVBZGRpdGlvbmFsS2V5cyIsImtleURhdGEiLCJtYXAiLCJrZXkiLCJuYW1lIiwibGF0ZXgiLCJ3cml0ZSIsImxhYmVsIiwiaXNDaGlsZE9mQ3VycmVudFBpZUVsZW1lbnQiLCJjaGlsZCIsInBhcmVudCIsIm5vZGUiLCJwYXJlbnROb2RlIiwiZ2V0S2V5UGFkV2lkdGgiLCJhZGRpdGlvbmFsS2V5cyIsImVxdWF0aW9uRWRpdG9yIiwiTWF0aCIsImZsb29yIiwibGVuZ3RoIiwicHJlcGFyZUZvclN0YXRpYyIsIm1vZGVsIiwic3RhdGUiLCJjb25maWciLCJkaXNhYmxlZCIsImV4cHJlc3Npb24iLCJyZXNwb25zZXMiLCJwcmludE1vZGUiLCJhbHdheXNTaG93Q29ycmVjdCIsIm1vZGVsRXhwcmVzc2lvbiIsInNob3dDb3JyZWN0IiwiYW5zd2VyIiwiYW5zd2VyQmxvY2tzIiwicmVwbGFjZSIsInNlc3Npb24iLCJhbnN3ZXJzIiwiYmxhbmtTcGFjZSIsInJlcGVhdCIsInZhbHVlIiwicGFyc2VBbnN3ZXJzIiwiTWFpbiIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0Iiwicm9vdCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYW5zd2VySWQiLCJlbCIsInF1ZXJ5U2VsZWN0b3IiLCJpbmRleEVsIiwiYXBwbHlTdGF0aWNNYXRoIiwidmlldyIsInBhcmVudEVsZW1lbnQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJ0ZXh0Q29udGVudCIsInJlbmRlck1hdGgiLCJzZWxlY3RhYmxlRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZWxlbSIsInNldEF0dHJpYnV0ZSIsInRleHRhcmVhRWxlbWVudHMiLCJpbmRleCIsImluc3RydWN0aW9uc0lkIiwiY2xvc2VzdCIsImluc3RydWN0aW9uc0VsZW1lbnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsImNsYXNzTmFtZSIsImluc2VydEJlZm9yZSIsInNldFRpbWVvdXQiLCJrZXlwYWRFbGVtZW50IiwiZmlyc3RCdXR0b24iLCJmb2N1cyIsImV2ZW50IiwiaXNUcmlnZXJyZWRGcm9tQWN0dWFsUGllRWxlbWVudCIsInRhcmdldCIsImlzQW5zd2VySW5wdXRGb2N1c2VkIiwibXFTdGF0aWMiLCJpbnB1dFJlZiIsImN1cnJlbnQiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJ0eXBlIiwiaXNDbGlja09yVG91Y2hFdmVudCIsImFjdGl2ZUFuc3dlckJsb2NrIiwiY2xlYW51cEtleURvd25MaXN0ZW5lciIsInNldFN0YXRlIiwib25TdWJGaWVsZEZvY3VzIiwiZm9jdXNGaXJzdEtleXBhZEVsZW1lbnQiLCJoYW5kbGVFdmVudCIsImhhbmRsZUtleURvd24iLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlc3BvbnNlIiwiY2FsbE9uU2Vzc2lvbkNoYW5nZSIsImRhdGEiLCJpbnB1dCIsInNjcm9sbFgiLCJ3aW5kb3ciLCJzY3JvbGxZIiwiYyIsInRvTm9kZURhdGEiLCJjbGVhciIsIkFycmF5IiwiaXNBcnJheSIsInZ2IiwiY21kIiwia2V5c3Ryb2tlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2Nyb2xsVG8iLCJvblNlc3Npb25DaGFuZ2UiLCJzaG93IiwiaGFuZGxlQW5zd2VyQmxvY2tEb21VcGRhdGUiLCJzdWJmaWVsZFZhbHVlIiwidXBkYXRlU3BhbnMiLCJjb21wbGV0ZUFuc3dlciIsIm1hdGhGaWVsZCIsImNoYW5nZUZpZWxkIiwiZmllbGRzIiwiZmluZCIsImsiLCJ0ZiIsImUiLCJyZWxhdGVkVGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImlzS2V5cGFkT3BlbiIsImdldFBhcmVudFdpdGhSb2xlVG9vbHRpcCIsImVsZW1lbnQiLCJkZXB0aCIsIm9mZnNldFBhcmVudCIsImdldERlZXBDaGlsZERhdGFLZXlwYWQiLCJjaGlsZHJlbiIsImF0dHJpYnV0ZXMiLCJwYXJlbnRXaXRoVG9vbHRpcFJvbGUiLCJjaGlsZFdpdGhEYXRhS2V5cGFkIiwidG9vbHRpcENvbnRhaW5lclJlZiIsImNyZWF0ZVJlZiIsIlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQiLCJyZWdpc3RlckVtYmVkIiwiY2xhc3NOYW1lcyIsImdldEJsb2NrQ2xhc3NOYW1lcyIsImh0bWxTdHJpbmciLCJibG9ja0NvbnRhaW5lciIsImJsb2NrUmVzcG9uc2UiLCJibG9ja01hdGgiLCJ0ZXh0IiwiY291bnRSZXNwb25zZU9jY3VycmVuY2VzIiwicGF0dGVybiIsIm1hdGNoZXMiLCJtYXRjaCIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibmV4dFByb3BzIiwibmV4dENvbmZpZyIsIm5leHRTZXNzaW9uIiwiaXNFcXVhbCIsIm5vdGUiLCJsYW5ndWFnZSIsInQiLCJsbmciLCJlbnYiLCJtb2RlIiwidXBkYXRlQXJpYSIsIm5ld0Fuc3dlcnMiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJzYW1lTW9kZWwiLCJzYW1lU3RhdGUiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsInByZXZSZXNwb25zZVR5cGUiLCJyZXNwb25zZVR5cGUiLCJjdXJyZW50UmVzcG9uc2VUeXBlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJzZXRUb29sdGlwUmVmIiwicmVmIiwiZGl2IiwiZmlyc3RDaGlsZCIsInJlbmRlciIsImNvcnJlY3RuZXNzIiwiZXh0cmFDU1NSdWxlcyIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJyYXRpb25hbGUiLCJmZWVkYmFjayIsImFuaW1hdGlvbnNEaXNhYmxlZCIsInNob3dOb3RlIiwicHJvbXB0IiwiY3VzdG9tS2V5cyIsInJvbGUiLCJkaXNwbGF5Tm90ZSIsImVtcHR5UmVzcG9uc2UiLCJpc0VtcHR5Iiwic2hvd0NvcnJlY3RBbnN3ZXJUb2dnbGUiLCJ0b29sdGlwTW9kZUVuYWJsZWQiLCJjb3JyZWN0Iiwic3RhdGljTGF0ZXgiLCJ2aWV3TW9kZSIsInN0dWRlbnRQcmludE1vZGUiLCJzaG93UmF0aW9uYWxlIiwiaGFzVGV4dCIsImhhc01lZGlhIiwic2hvd1RlYWNoZXJJbnN0cnVjdGlvbnMiLCJwcmludFZpZXciLCJQcmludENvbnRhaW5lciIsIm1xIiwiU3RhdGljIiwib25TdWJGaWVsZENoYW5nZSIsInN1YkZpZWxkQ2hhbmdlZCIsImdldEZpZWxkTmFtZSIsInNldElucHV0Iiwib25CbHVyIiwibWlkQ29udGVudCIsIk1haW5Db250ZW50IiwiU3JPbmx5IiwiU3R5bGVkQ29sbGFwc2libGUiLCJsYWJlbHMiLCJoaWRkZW4iLCJ2aXNpYmxlIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJQcm9tcHRDb250YWluZXIiLCJQcmV2aWV3UHJvbXB0IiwiUmVhZGFibGUiLCJmYWxzZSIsIklucHV0QW5kS2V5cGFkQ29udGFpbmVyIiwidGFiSW5kZXgiLCJSZXNwb25zZVR5cGVzIiwic2ltcGxlIiwib25TaW1wbGVSZXNwb25zZUNoYW5nZSIsInNob3dLZXlwYWQiLCJhZHZhbmNlZCIsIkV4cHJlc3Npb24iLCJpc0luY29ycmVjdCIsImlzQ29ycmVjdCIsInNob3dDb3JyZWN0bmVzcyIsImNvcnJlY3RBbnN3ZXJTaG93biIsInByaW50Q29ycmVjdCIsImVudGVyVG91Y2hEZWxheSIsImludGVyYWN0aXZlIiwib3BlbiIsInNsb3RQcm9wcyIsInBvcHBlciIsImNvbnRhaW5lciIsInVuZGVmaW5lZCIsInBsYWNlbWVudCIsInN4IiwiYmFja2dyb3VuZENvbG9yIiwid2lkdGgiLCJvcGFjaXR5IiwiZGlzcGxheSIsIm1vZGlmaWVycyIsIm9wdGlvbnMiLCJvZmZzZXQiLCJlbmFibGVkIiwiYm91bmRhcnkiLCJwYWRkaW5nIiwiYWRhcHRpdmUiLCJncHVBY2NlbGVyYXRpb24iLCJ0b29sdGlwIiwiZm9udFNpemUiLCJtYXJnaW5Ub3AiLCJwYWRkaW5nVG9wIiwiYm94U2hhZG93IiwidGl0bGUiLCJSZXNwb25zZUNvbnRhaW5lciIsInN0eWxlIiwiSG9yaXpvbnRhbEtleXBhZCIsIm9uQ2xpY2siLCJOb3RlIiwiQ29sbGFwc2libGUiLCJTdHlsZWRVaUxheW91dCIsInIiLCJkb21Ob2RlIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsIlN0eWxlZFRvb2x0aXAiLCJ0aGVtZSIsImJhY2tncm91bmQiLCJjb2xvciIsInByaW1hcnlMaWdodCIsInNwYWNpbmciLCJib3JkZXIiLCJzZWNvbmRhcnkiLCJTdHlsZWRDb3JyZWN0QW5zd2VyVG9nZ2xlIiwidG9nZ2xlZCIsIm9uVG9nZ2xlIiwidG9nZ2xlU2hvd0NvcnJlY3QiLCJGZWVkYmFjayIsImV4cG9ydHMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInN0eWxlSWQiLCJnZXRFbGVtZW50QnlJZCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsInN0eWxlZCIsIlVpTGF5b3V0IiwiVG9vbHRpcCIsIm1hcmdpbkJvdHRvbSIsInBvc2l0aW9uIiwicGFkZGluZ0JvdHRvbSIsInpJbmRleCIsIm1pbldpZHRoIiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwiaW5jbHVkZXMiLCJib3JkZXJDb2xvciIsImluY29ycmVjdCIsIm1heFdpZHRoIiwibGV0dGVyU3BhY2luZyIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdMZWZ0IiwidG9wIiwibGluZUhlaWdodCIsImxlZnQiLCJyaWdodCIsImJvcmRlclRvcCIsInBvaW50ZXJFdmVudHMiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIkNvcnJlY3RBbnN3ZXJUb2dnbGUiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDb3JyZWN0QW5zd2VyVG9nZ2xlIGZyb20gJ0BwaWUtbGliL2NvcnJlY3QtYW5zd2VyLXRvZ2dsZSc7XG5pbXBvcnQgeyBtcSwgSG9yaXpvbnRhbEtleXBhZCwgdXBkYXRlU3BhbnMsIHJlZ2lzdGVyRW1iZWQsIGFwcGx5U3RhdGljTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtaW5wdXQtbWF0aGxpdmUnO1xuaW1wb3J0IHsgRmVlZGJhY2ssIENvbGxhcHNpYmxlLCBSZWFkYWJsZSwgaGFzVGV4dCwgaGFzTWVkaWEsIFByZXZpZXdQcm9tcHQsIFVpTGF5b3V0IH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IHJlbmRlck1hdGggfSBmcm9tICdAcGllLWxpYi9tYXRoLXJlbmRlcmluZyc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbXVpL21hdGVyaWFsL1Rvb2x0aXAnO1xuaW1wb3J0IHsgUmVzcG9uc2VUeXBlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgU2ltcGxlUXVlc3Rpb25CbG9jayBmcm9tICcuL3NpbXBsZS1xdWVzdGlvbi1ibG9jayc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgVHJhbnNsYXRvciBmcm9tICdAcGllLWxpYi90cmFuc2xhdG9yJztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuY29uc3QgeyB0cmFuc2xhdG9yIH0gPSBUcmFuc2xhdG9yO1xubGV0IHJlZ2lzdGVyZWQgPSBmYWxzZTtcblxuY29uc3QgTkVXTElORV9MQVRFWCA9IC9cXFxcbmV3bGluZS9nO1xuY29uc3QgUkVHRVggPSAve3tyZXNwb25zZX19L2dtO1xuY29uc3QgREVGQVVMVF9LRVlQQURfVkFSSUFOVCA9IDY7XG5cbi8vICEhISBJZiB5b3UncmUgdXNpbmcgQ2hyb21lIGJ1dCBoYXZlIHNlbGVjdGVkIHRoZSBcImlQYWRcIiBkZXZpY2UgaW4gQ2hyb21lIERldmVsb3BlciBUb29scywgdGhlIG5hdmlnYXRvci51c2VyQWdlbnQgc3RyaW5nIG1heSBzdGlsbCByZXBvcnQgYXNcbi8vICBTYWZhcmkgYmVjYXVzZSBDaHJvbWUgb24gaU9TIGFjdHVhbGx5IHVzZXMgdGhlIFNhZmFyaSByZW5kZXJpbmcgZW5naW5lIHVuZGVyIHRoZSBob29kIGR1ZSB0byBBcHBsZSdzIHJlc3RyaWN0aW9ucyBvbiB0aGlyZC1wYXJ0eSBicm93c2VyIGVuZ2luZXMuXG4vLyBXaGVuIHlvdSBzZWxlY3QgdGhlIFwiaVBhZFwiIGRldmljZSBpbiBDaHJvbWUgRGV2ZWxvcGVyIFRvb2xzLCB5b3UncmUgZXNzZW50aWFsbHkgZW11bGF0aW5nIHRoZSBiZWhhdmlvciBvZiBTYWZhcmkgb24gYW4gaVBhZCwgaW5jbHVkaW5nIHRoZSB1c2VyIGFnZW50IHN0cmluZy5cbi8vICBUaGVyZWZvcmUsIGV2ZW4gdGhvdWdoIHlvdSdyZSB1c2luZyBDaHJvbWUsIHRoZSB1c2VyIGFnZW50IHN0cmluZyB3aWxsIHJlc2VtYmxlIHRoYXQgb2YgU2FmYXJpIG9uIGFuIGlQYWQuXG4vLyBTaW5jZSB0aGUgcmVndWxhciBleHByZXNzaW9uIC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIFwic2FmYXJpXCIgaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHdoaWxlIGV4Y2x1ZGluZyBcImNocm9tZVwiIGFuZCBcImFuZHJvaWRcIixcbi8vICBpdCB3aWxsIHJldHVybiB0cnVlIGluIHRoaXMgY2FzZSBiZWNhdXNlIFwic2FmYXJpXCIgaXMgcHJlc2VudCBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgZW11bGF0ZWQgYnkgQ2hyb21lIHdoZW4gaW4gaVBhZCBtb2RlLlxuY29uc3QgSVNfU0FGQVJJID0gL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVBZGRpdGlvbmFsS2V5cyhrZXlEYXRhID0gW10pIHtcbiAgcmV0dXJuIGtleURhdGEubWFwKChrZXkpID0+ICh7XG4gICAgbmFtZToga2V5LFxuICAgIGxhdGV4OiBrZXksXG4gICAgd3JpdGU6IGtleSxcbiAgICBsYWJlbDoga2V5LFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGlzQ2hpbGRPZkN1cnJlbnRQaWVFbGVtZW50KGNoaWxkLCBwYXJlbnQpIHtcbiAgbGV0IG5vZGUgPSBjaGlsZDtcbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAocGFyZW50ICYmIG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRLZXlQYWRXaWR0aChhZGRpdGlvbmFsS2V5cyA9IFtdLCBlcXVhdGlvbkVkaXRvcikge1xuICByZXR1cm4gTWF0aC5mbG9vcihhZGRpdGlvbmFsS2V5cy5sZW5ndGggLyA1KSAqIDMwICsgKGVxdWF0aW9uRWRpdG9yID09PSAnbWlzY2VsbGFuZW91cycgPyA2MDAgOiA1MDApO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRm9yU3RhdGljKG1vZGVsLCBzdGF0ZSkge1xuICBjb25zdCB7IGNvbmZpZywgZGlzYWJsZWQgfSA9IG1vZGVsIHx8IHt9O1xuICBjb25zdCB7IGV4cHJlc3Npb24sIHJlc3BvbnNlcywgcHJpbnRNb2RlLCBhbHdheXNTaG93Q29ycmVjdCB9ID0gY29uZmlnIHx8IHt9O1xuXG4gIGlmIChjb25maWcgJiYgZXhwcmVzc2lvbikge1xuICAgIGNvbnN0IG1vZGVsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG5cbiAgICBpZiAoc3RhdGUuc2hvd0NvcnJlY3QpIHtcbiAgICAgIHJldHVybiByZXNwb25zZXMgJiYgcmVzcG9uc2VzLmxlbmd0aCAmJiByZXNwb25zZXNbMF0uYW5zd2VyO1xuICAgIH1cblxuICAgIGxldCBhbnN3ZXJCbG9ja3MgPSAxOyAvLyBhc3N1bWUgb25lIGF0IGxlYXN0XG4gICAgLy8gYnVpbGQgb3V0IGxvY2FsIHN0YXRlIG1vZGVsIHVzaW5nIHJlc3BvbnNlcyBkZWNsYXJlZCBpbiBleHByZXNzaW9uXG5cbiAgICByZXR1cm4gKG1vZGVsRXhwcmVzc2lvbiB8fCAnJylcbiAgICAgIC5yZXBsYWNlKFJFR0VYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHN0YXRlLnNlc3Npb24uYW5zd2Vyc1tgciR7YW5zd2VyQmxvY2tzfWBdO1xuXG4gICAgICAgIGlmIChwcmludE1vZGUgJiYgIWFsd2F5c1Nob3dDb3JyZWN0KSB7XG4gICAgICAgICAgY29uc3QgYmxhbmtTcGFjZSA9ICdcXFxcIFxcXFwgJy5yZXBlYXQoMzApICsgJ1xcXFxuZXdsaW5lICc7XG5cbiAgICAgICAgICByZXR1cm4gYFxcXFxNYXRoUXVpbGxNYXRoRmllbGRbciR7YW5zd2VyQmxvY2tzKyt9XXske2JsYW5rU3BhY2UucmVwZWF0KDMpfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIGBcXFxcZW1iZWR7YW5zd2VyQmxvY2t9W3Ike2Fuc3dlckJsb2NrcysrfV1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBcXFxcTWF0aFF1aWxsTWF0aEZpZWxkW3Ike2Fuc3dlckJsb2NrcysrfV17JHsoYW5zd2VyICYmIGFuc3dlci52YWx1ZSkgfHwgJyd9fWA7XG4gICAgICB9KVxuICAgICAgLnJlcGxhY2UoTkVXTElORV9MQVRFWCwgJ1xcXFxlbWJlZHtuZXdMaW5lfVtdJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBbnN3ZXJzKHNlc3Npb24sIG1vZGVsKSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcblxuICBpZiAobW9kZWwuY29uZmlnICYmIG1vZGVsLmNvbmZpZy5leHByZXNzaW9uKSB7XG4gICAgbGV0IGFuc3dlckJsb2NrcyA9IDE7IC8vIGFzc3VtZSBvbmUgYXQgbGVhc3RcbiAgICAvLyBidWlsZCBvdXQgbG9jYWwgc3RhdGUgbW9kZWwgdXNpbmcgcmVzcG9uc2VzIGRlY2xhcmVkIGluIGV4cHJlc3Npb25cblxuICAgIChtb2RlbC5jb25maWcuZXhwcmVzc2lvbiB8fCAnJykucmVwbGFjZShSRUdFWCwgKCkgPT4ge1xuICAgICAgYW5zd2Vyc1tgciR7YW5zd2VyQmxvY2tzfWBdID0ge1xuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAoc2Vzc2lvbiAmJlxuICAgICAgICAgICAgc2Vzc2lvbi5hbnN3ZXJzICYmXG4gICAgICAgICAgICBzZXNzaW9uLmFuc3dlcnNbYHIke2Fuc3dlckJsb2Nrc31gXSAmJlxuICAgICAgICAgICAgc2Vzc2lvbi5hbnN3ZXJzW2ByJHthbnN3ZXJCbG9ja3N9YF0udmFsdWUpIHx8XG4gICAgICAgICAgJycsXG4gICAgICB9O1xuXG4gICAgICBhbnN3ZXJCbG9ja3MgKz0gMTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZXhwb3J0IGNsYXNzIE1haW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIHNlc3Npb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvblNlc3Npb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBtb2RlbCwgc2Vzc2lvbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgYW5zd2VycyA9IHBhcnNlQW5zd2VycyhzZXNzaW9uLCBtb2RlbCk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc2Vzc2lvbjogeyAuLi5wcm9wcy5zZXNzaW9uLCBhbnN3ZXJzIH0sXG4gICAgICBhY3RpdmVBbnN3ZXJCbG9jazogJycsXG4gICAgICBzaG93Q29ycmVjdDogdGhpcy5wcm9wcy5tb2RlbC5jb25maWcuYWx3YXlzU2hvd0NvcnJlY3QgfHwgZmFsc2UsXG4gICAgICB0b29sdGlwQ29udGFpbmVyUmVmOiBSZWFjdC5jcmVhdGVSZWYoKSxcbiAgICB9O1xuICB9XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICghcmVnaXN0ZXJlZCkge1xuICAgICAgICByZWdpc3RlckVtYmVkKCdhbnN3ZXJCbG9jaycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IGdldEJsb2NrQ2xhc3NOYW1lcygpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBodG1sU3RyaW5nOiBgPGRpdiBjbGFzcz1cIiR7Y2xhc3NOYW1lcy5ibG9ja0NvbnRhaW5lcn1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc05hbWVzLmJsb2NrUmVzcG9uc2V9XCIgaWQ9XCIke2RhdGF9SW5kZXhcIj5SPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NOYW1lcy5ibG9ja01hdGh9XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIiR7ZGF0YX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PmAsXG4gICAgICAgICAgICB0ZXh0OiAoKSA9PiAndGV4dCcsXG4gICAgICAgICAgICBsYXRleDogKCkgPT4gYFxcXFxlbWJlZHthbnN3ZXJCbG9ja31bJHtkYXRhfV1gLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlZ2lzdGVyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFuc3dlckJsb2NrRG9tVXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBzaG93Q29ycmVjdCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBhbnN3ZXJzID0gc2Vzc2lvbi5hbnN3ZXJzO1xuXG4gICAgaWYgKHRoaXMucm9vdCAmJiBtb2RlbC5kaXNhYmxlZCAmJiAhc2hvd0NvcnJlY3QpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFuc3dlcnMpLmZvckVhY2goKGFuc3dlcklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoYCMke2Fuc3dlcklkfWApO1xuICAgICAgICBjb25zdCBpbmRleEVsID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoYCMke2Fuc3dlcklkfUluZGV4YCk7XG4gICAgICAgIC8vIGNvbnN0IGNvcnJlY3QgPSBtb2RlbC5jb3JyZWN0bmVzcyAmJiBtb2RlbC5jb3JyZWN0bmVzcy5jb3JyZWN0O1xuXG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGFuc3dlcnNbYW5zd2VySWRdO1xuXG4gICAgICAgICAgYXBwbHlTdGF0aWNNYXRoKGVsLCAoYW5zd2VyICYmIGFuc3dlci52YWx1ZSkgfHwgJycpO1xuXG4gICAgICAgICAgaWYgKCFtb2RlbC52aWV3KSB7XG4gICAgICAgICAgICAvLyBmb3Igbm93LCB3ZSdyZSBub3QgZ29pbmcgdG8gYmUgc2hvd2luZyBpbmRpdmlkdWFsIHJlc3BvbnNlIGNvcnJlY3RuZXNzXG4gICAgICAgICAgICAvLyBUT0RPIHJlLWF0dGFjaCB0aGUgY2xhc3NlcyBvbmNlIHdlIGFyZVxuICAgICAgICAgICAgLy8gZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgICAgICAvLyAgIGNvcnJlY3QgPyAnY29ycmVjdCcgOiAnaW5jb3JyZWN0J1xuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2NvcnJlY3QnKTtcbiAgICAgICAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbmNvcnJlY3QnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGb3Igbm93LCB3ZSdyZSBub3QgZ29pbmcgdG8gYmUgaW5kZXhpbmcgcmVzcG9uc2UgYmxvY2tzXG4gICAgICAgICAgLy8gVE9ETyBnbyBiYWNrIHRvIGluZGV4aW5nIG9uY2Ugd2Ugc3VwcG9ydCBpbmRpdmlkdWFsIHJlc3BvbnNlIGNvcnJlY3RuZXNzXG4gICAgICAgICAgLy8gaW5kZXhFbC50ZXh0Q29udGVudCA9IGBSJHtpZHggKyAxfWA7XG4gICAgICAgICAgaW5kZXhFbC50ZXh0Q29udGVudCA9ICdSJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyTWF0aCh0aGlzLnJvb3QpO1xuICB9O1xuXG4gIGNvdW50UmVzcG9uc2VPY2N1cnJlbmNlcyhleHByZXNzaW9uKSB7XG4gICAgY29uc3QgcGF0dGVybiA9IC9cXHtcXHtyZXNwb25zZVxcfVxcfS9nO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBleHByZXNzaW9uPy5tYXRjaChwYXR0ZXJuKTtcblxuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcy5sZW5ndGggOiAwO1xuICB9XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXMucHJvcHMubW9kZWw7XG4gICAgY29uc3QgeyBjb25maWc6IG5leHRDb25maWcgPSB7fSB9ID0gbmV4dFByb3BzLm1vZGVsIHx8IHt9O1xuXG4gICAgY29uc3QgeyBzZXNzaW9uIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2Vzc2lvbjogbmV4dFNlc3Npb24gPSB7fSB9ID0gbmV4dFByb3BzIHx8IHt9O1xuXG4gICAgLy8gaW4gY2FzZSBzZXNzaW9uIHByb3BzIGNoYW5nZWQgaW4gcGFyZW50LCB3ZSBuZWVkIHRvIGNhdGNoIHRoaXMgYW5kIHVwZGF0ZSBsb2NhbCBzdGF0ZVxuICAgIC8vIGV4YW1wbGU6IHdoZW4gZW52IGlzIGNoYW5naW5nIGluIHBpZW9uZWVyXG4gICAgaWYgKHNlc3Npb24gJiYgbmV4dFNlc3Npb24gJiYgIWlzRXF1YWwoc2Vzc2lvbi5hbnN3ZXJzLCBuZXh0U2Vzc2lvbi5hbnN3ZXJzKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlc3Npb246IHsgLi4ubmV4dFNlc3Npb24sIGFuc3dlcnM6IHBhcnNlQW5zd2VycyhuZXh0U2Vzc2lvbiwgdGhpcy5wcm9wcy5tb2RlbCkgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBub3RlIGlzIHRoZSBkZWZhdWx0IG9uZSBmb3IgcHJldiBsYW5ndWFnZSBhbmQgY2hhbmdlIHRvIHRoZSBkZWZhdWx0IG9uZSBmb3IgbmV3IGxhbmd1YWdlXG4gICAgLy8gdGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gZGlmZXJhbmNpYXRlIGJldHdlZW4gZGVmYXVsdCBhbmQgYXV0aG91ciBkZWZpbmVkIG5vdGVcbiAgICAvLyBhbmQgb25seSBjaGFuZ2UgYmV0d2VlbiBsYW5ndWFnZXMgZm9yIGRlZmF1bHQgb25lc1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy5ub3RlICYmXG4gICAgICBjb25maWcubGFuZ3VhZ2UgJiZcbiAgICAgIGNvbmZpZy5sYW5ndWFnZSAhPT0gbmV4dENvbmZpZy5sYW5ndWFnZSAmJlxuICAgICAgY29uZmlnLm5vdGUgPT09IHRyYW5zbGF0b3IudCgnbWF0aElubGluZS5wcmltYXJ5Q29ycmVjdFdpdGhBbHRlcm5hdGVzJywgeyBsbmc6IGNvbmZpZy5sYW5ndWFnZSB9KVxuICAgICkge1xuICAgICAgY29uZmlnLm5vdGUgPSB0cmFuc2xhdG9yLnQoJ21hdGhJbmxpbmUucHJpbWFyeUNvcnJlY3RXaXRoQWx0ZXJuYXRlcycsIHsgbG5nOiBuZXh0Q29uZmlnLmxhbmd1YWdlIH0pO1xuICAgIH1cblxuICAgIGlmICgoY29uZmlnLmVudiAmJiBjb25maWcuZW52Lm1vZGUgIT09ICdldmFsdWF0ZScpIHx8IChuZXh0Q29uZmlnLmVudiAmJiBuZXh0Q29uZmlnLmVudi5tb2RlICE9PSAnZXZhbHVhdGUnKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLnRoaXMuc3RhdGUuc2Vzc2lvbiwgc2hvd0NvcnJlY3Q6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGlmIChuZXh0Q29uZmlnLmFsd2F5c1Nob3dDb3JyZWN0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgc2hvd0NvcnJlY3Q6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY291bnRSZXNwb25zZU9jY3VycmVuY2VzKGNvbmZpZy5leHByZXNzaW9uKSA8IHRoaXMuY291bnRSZXNwb25zZU9jY3VycmVuY2VzKG5leHRDb25maWcuZXhwcmVzc2lvbikpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVBcmlhKCksIDEwMCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGNvbmZpZyAmJiBjb25maWcucmVzcG9uc2VzICYmIGNvbmZpZy5yZXNwb25zZXMubGVuZ3RoICE9PSBuZXh0Q29uZmlnLnJlc3BvbnNlcy5sZW5ndGgpIHx8XG4gICAgICAoIWNvbmZpZyAmJiBuZXh0Q29uZmlnICYmIG5leHRDb25maWcucmVzcG9uc2VzKSB8fFxuICAgICAgKGNvbmZpZyAmJiBuZXh0Q29uZmlnICYmIGNvbmZpZy5leHByZXNzaW9uICE9PSBuZXh0Q29uZmlnLmV4cHJlc3Npb24pXG4gICAgKSB7XG4gICAgICBjb25zdCBuZXdBbnN3ZXJzID0ge307XG4gICAgICBjb25zdCBhbnN3ZXJzID0gdGhpcy5zdGF0ZS5zZXNzaW9uLmFuc3dlcnM7XG5cbiAgICAgIGxldCBhbnN3ZXJCbG9ja3MgPSAxOyAvLyBhc3N1bWUgb25lIGF0IGxlYXN0XG5cbiAgICAgIC8vIGJ1aWxkIG91dCBsb2NhbCBzdGF0ZSBtb2RlbCB1c2luZyByZXNwb25zZXMgZGVjbGFyZWQgaW4gZXhwcmVzc2lvblxuICAgICAgKG5leHRDb25maWcuZXhwcmVzc2lvbiB8fCAnJykucmVwbGFjZShSRUdFWCwgKCkgPT4ge1xuICAgICAgICBuZXdBbnN3ZXJzW2ByJHthbnN3ZXJCbG9ja3N9YF0gPSB7XG4gICAgICAgICAgdmFsdWU6IChhbnN3ZXJzICYmIGFuc3dlcnNbYHIke2Fuc3dlckJsb2Nrc31gXSAmJiBhbnN3ZXJzW2ByJHthbnN3ZXJCbG9ja3N9YF0udmFsdWUpIHx8ICcnLFxuICAgICAgICB9O1xuICAgICAgICBhbnN3ZXJCbG9ja3MrKztcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAoc3RhdGUpID0+ICh7XG4gICAgICAgICAgc2Vzc2lvbjoge1xuICAgICAgICAgICAgLi4uc3RhdGUuc2Vzc2lvbixcbiAgICAgICAgICAgIGNvbXBsZXRlQW5zd2VyOiB0aGlzLm1xU3RhdGljICYmIHRoaXMubXFTdGF0aWMubWF0aEZpZWxkLmxhdGV4KCksXG4gICAgICAgICAgICBhbnN3ZXJzOiBuZXdBbnN3ZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLmhhbmRsZUFuc3dlckJsb2NrRG9tVXBkYXRlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICBjb25zdCBzYW1lTW9kZWwgPSBpc0VxdWFsKHRoaXMucHJvcHMubW9kZWwsIG5leHRQcm9wcy5tb2RlbCk7XG4gICAgY29uc3Qgc2FtZVN0YXRlID0gaXNFcXVhbCh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xuXG4gICAgcmV0dXJuICFzYW1lTW9kZWwgfHwgIXNhbWVTdGF0ZTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuaGFuZGxlQW5zd2VyQmxvY2tEb21VcGRhdGUoKTtcbiAgICB0aGlzLnVwZGF0ZUFyaWEoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHJlbmRlck1hdGgodGhpcy5yb290KSwgMTAwKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIHRoaXMuaGFuZGxlQW5zd2VyQmxvY2tEb21VcGRhdGUoKTtcblxuICAgIGNvbnN0IHByZXZSZXNwb25zZVR5cGUgPSBwcmV2UHJvcHMubW9kZWw/LmNvbmZpZz8ucmVzcG9uc2VUeXBlO1xuICAgIGNvbnN0IGN1cnJlbnRSZXNwb25zZVR5cGUgPSB0aGlzLnByb3BzLm1vZGVsPy5jb25maWc/LnJlc3BvbnNlVHlwZTtcblxuICAgIGlmIChwcmV2UmVzcG9uc2VUeXBlICE9PSBjdXJyZW50UmVzcG9uc2VUeXBlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUFyaWEoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVBcmlhID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgIC8vIFVwZGF0ZSBhcmlhLWhpZGRlbiBmb3IgLm1xLXNlbGVjdGFibGUgZWxlbWVudHNcbiAgICAgIGNvbnN0IHNlbGVjdGFibGVFbGVtZW50cyA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcubXEtc2VsZWN0YWJsZScpO1xuICAgICAgc2VsZWN0YWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IGVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJykpO1xuXG4gICAgICAvLyBVcGRhdGUgYXJpYS1sYWJlbCBmb3IgdGV4dGFyZWEgZWxlbWVudHMgYW5kIGFkZCBhcmlhLWRlc2NyaWJlZGJ5XG4gICAgICBjb25zdCB0ZXh0YXJlYUVsZW1lbnRzID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RleHRhcmVhJyk7XG4gICAgICB0ZXh0YXJlYUVsZW1lbnRzLmZvckVhY2goKGVsZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0VudGVyIGFuc3dlci4nKTtcblxuICAgICAgICAvLyBDcmVhdGUgYSB1bmlxdWUgaWQgZm9yIGVhY2ggaW5zdHJ1Y3Rpb25zIGVsZW1lbnRcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zSWQgPSBgaW5zdHJ1Y3Rpb25zLSR7aW5kZXh9YDtcblxuICAgICAgICAvLyBGaW5kIHRoZSBwYXJlbnQgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0ZXh0YXJlYVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtLmNsb3Nlc3QoJy5tcS10ZXh0YXJlYScpO1xuXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgb3IgZmluZCB0aGUgaW5zdHJ1Y3Rpb25zIGVsZW1lbnQgd2l0aGluIHRoZSBwYXJlbnRcbiAgICAgICAgICBsZXQgaW5zdHJ1Y3Rpb25zRWxlbWVudCA9IHBhcmVudC5xdWVyeVNlbGVjdG9yKGAjJHtpbnN0cnVjdGlvbnNJZH1gKTtcblxuICAgICAgICAgIGlmICghaW5zdHJ1Y3Rpb25zRWxlbWVudCkge1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGluc3RydWN0aW9uc0VsZW1lbnQuaWQgPSBpbnN0cnVjdGlvbnNJZDtcbiAgICAgICAgICAgIGluc3RydWN0aW9uc0VsZW1lbnQuY2xhc3NOYW1lID0gJ3NyLW9ubHknO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zRWxlbWVudC50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICdUaGlzIGZpZWxkIHN1cHBvcnRzIGJvdGgga2V5cGFkIGFuZCBrZXlib2FyZCBpbnB1dC4gVXNlIHRoZSBrZXlib2FyZCB0byBhY2Nlc3MgYW5kIGludGVyYWN0IHdpdGggdGhlIG9uLXNjcmVlbiBtYXRoIGtleXBhZCwgd2hpY2ggYWNjZXB0cyBMYVRlWCBtYXJrdXAuIFVzZSB0aGUgZG93biBhcnJvdyBrZXkgdG8gb3BlbiB0aGUga2V5cGFkIGFuZCBuYXZpZ2F0ZSBpdHMgYnV0dG9ucy4gVXNlIHRoZSBlc2NhcGUga2V5IHRvIGNsb3NlIHRoZSBrZXlwYWQgYW5kIHJldHVybiB0byB0aGUgaW5wdXQgZmllbGQuJztcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoaW5zdHJ1Y3Rpb25zRWxlbWVudCwgZWxlbSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBpbnN0cnVjdGlvbnNJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmb2N1c0ZpcnN0S2V5cGFkRWxlbWVudCA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGtleXBhZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1rZXlwYWRdJyk7XG5cbiAgICAgIGlmIChrZXlwYWRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QnV0dG9uID0ga2V5cGFkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uLCBbcm9sZT0nYnV0dG9uJ11cIik7XG5cbiAgICAgICAgaWYgKGZpcnN0QnV0dG9uKSB7XG4gICAgICAgICAgZmlyc3RCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDApO1xuICB9O1xuXG4gIGhhbmRsZUtleURvd24gPSAoZXZlbnQsIGlkKSA9PiB7XG4gICAgY29uc3QgaXNUcmlnZXJyZWRGcm9tQWN0dWFsUGllRWxlbWVudCA9IGlzQ2hpbGRPZkN1cnJlbnRQaWVFbGVtZW50KGV2ZW50LnRhcmdldCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBpc0Fuc3dlcklucHV0Rm9jdXNlZCA9XG4gICAgICB0aGlzLm1xU3RhdGljICYmIHRoaXMubXFTdGF0aWMuaW5wdXRSZWY/LmN1cnJlbnRcbiAgICAgICAgPyB0aGlzLm1xU3RhdGljLmlucHV0UmVmPy5jdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpXG4gICAgICAgIDogZG9jdW1lbnQuYWN0aXZlRWxlbWVudD8uZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgPT09ICdFbnRlciBhbnN3ZXIuJztcbiAgICBjb25zdCB7IGtleSwgdHlwZSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgaXNDbGlja09yVG91Y2hFdmVudCA9IHR5cGUgPT09ICdjbGljaycgfHwgdHlwZSA9PT0gJ3RvdWNoc3RhcnQnO1xuXG4gICAgaWYgKGlzQW5zd2VySW5wdXRGb2N1c2VkICYmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGlzQ2xpY2tPclRvdWNoRXZlbnQpKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5hY3RpdmVBbnN3ZXJCbG9jayAhPT0gaWQgJiYgaXNUcmlnZXJyZWRGcm9tQWN0dWFsUGllRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsZWFudXBLZXlEb3duTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZUFuc3dlckJsb2NrOiBpZCB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vblN1YkZpZWxkRm9jdXMoaWQpO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRmlyc3RLZXlwYWRFbGVtZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVBbnN3ZXJCbG9jazogJycgfSk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3ViRmllbGRGb2N1cyA9IChpZCkgPT4ge1xuICAgIGlmICghdGhpcy5oYW5kbGVFdmVudCkge1xuICAgICAgdGhpcy5oYW5kbGVFdmVudCA9IChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQsIGlkKTtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUV2ZW50KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVFdmVudCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVFdmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFudXBLZXlEb3duTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaGFuZGxlRXZlbnQpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUV2ZW50KTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVFdmVudCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVFdmVudCk7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEtleURvd25MaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGVhbnVwS2V5RG93bkxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25Eb25lID0gKCkgPT4ge307XG5cbiAgb25TaW1wbGVSZXNwb25zZUNoYW5nZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlKSA9PiAoeyBzZXNzaW9uOiB7IC4uLnN0YXRlLnNlc3Npb24sIHJlc3BvbnNlIH0gfSksIHRoaXMuY2FsbE9uU2Vzc2lvbkNoYW5nZSk7XG4gIH07XG5cbiAgdG9Ob2RlRGF0YSA9IChkYXRhKSA9PiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB0eXBlLCB2YWx1ZSB9ID0gZGF0YTtcblxuICAgIGlmICh0eXBlID09PSAnY29tbWFuZCcgfHwgdHlwZSA9PT0gJ2N1cnNvcicpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Fuc3dlcicpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6ICdhbnN3ZXInLCAuLi5kYXRhIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2NsZWFyJykge1xuICAgICAgcmV0dXJuIHsgdHlwZTogJ2NsZWFyJyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB0eXBlOiAnd3JpdGUnLCB2YWx1ZSB9O1xuICAgIH1cbiAgfTtcblxuICBzZXRJbnB1dCA9IChpbnB1dCkgPT4ge1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgfTtcblxuICBvbkNsaWNrID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCBzY3JvbGxYID0gd2luZG93LnNjcm9sbFg7XG4gICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGNvbnN0IGMgPSB0aGlzLnRvTm9kZURhdGEoZGF0YSk7XG5cbiAgICBpZiAoYy50eXBlID09PSAnY2xlYXInKSB7XG4gICAgICB0aGlzLmlucHV0LmNsZWFyKCk7XG4gICAgfSBlbHNlIGlmIChjLnR5cGUgPT09ICdjb21tYW5kJykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYy52YWx1ZSkpIHtcbiAgICAgICAgYy52YWx1ZS5mb3JFYWNoKCh2dikgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuY21kKHZ2KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0LmNtZChjLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGMudHlwZSA9PT0gJ2N1cnNvcicpIHtcbiAgICAgIHRoaXMuaW5wdXQua2V5c3Ryb2tlKGMudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0LndyaXRlKGMudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNjcm9sbFRvKHNjcm9sbFgsIHNjcm9sbFkpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHdpbmRvdy5zY3JvbGxUbyhzY3JvbGxYLCBzY3JvbGxZKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY2FsbE9uU2Vzc2lvbkNoYW5nZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IG9uU2Vzc2lvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChvblNlc3Npb25DaGFuZ2UpIHtcbiAgICAgIG9uU2Vzc2lvbkNoYW5nZSh0aGlzLnN0YXRlLnNlc3Npb24pO1xuICAgIH1cbiAgfTtcblxuICB0b2dnbGVTaG93Q29ycmVjdCA9IChzaG93KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNob3dDb3JyZWN0OiBzaG93IH0sIHRoaXMuaGFuZGxlQW5zd2VyQmxvY2tEb21VcGRhdGUpO1xuICB9O1xuXG4gIHN1YkZpZWxkQ2hhbmdlZCA9IChuYW1lLCBzdWJmaWVsZFZhbHVlKSA9PiB7XG4gICAgdXBkYXRlU3BhbnMoKTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBjb25zdCBzY3JvbGxYID0gd2luZG93LnNjcm9sbFg7XG4gICAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAoc3RhdGUpID0+ICh7XG4gICAgICAgICAgc2Vzc2lvbjoge1xuICAgICAgICAgICAgLi4uc3RhdGUuc2Vzc2lvbixcbiAgICAgICAgICAgIGNvbXBsZXRlQW5zd2VyOiB0aGlzLm1xU3RhdGljICYmIHRoaXMubXFTdGF0aWMubWF0aEZpZWxkLmxhdGV4KCksXG4gICAgICAgICAgICBhbnN3ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnNlc3Npb24uYW5zd2VycyxcbiAgICAgICAgICAgICAgW25hbWVdOiB7IHZhbHVlOiBzdWJmaWVsZFZhbHVlIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYWxsT25TZXNzaW9uQ2hhbmdlKCk7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyhzY3JvbGxYLCBzY3JvbGxZKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGdldEZpZWxkTmFtZSA9IChjaGFuZ2VGaWVsZCwgZmllbGRzKSA9PiB7XG4gICAgY29uc3QgeyBhbnN3ZXJzIH0gPSB0aGlzLnN0YXRlLnNlc3Npb247XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYW5zd2VycyB8fCB7fSkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYW5zd2Vycyk7XG5cbiAgICAgIHJldHVybiBrZXlzLmZpbmQoKGspID0+IHtcbiAgICAgICAgY29uc3QgdGYgPSBmaWVsZHNba107XG5cbiAgICAgICAgcmV0dXJuIHRmICYmIHRmLmlkID09IGNoYW5nZUZpZWxkLmlkO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9IChlKSA9PiB7XG4gICAgY29uc3QgeyByZWxhdGVkVGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBlIHx8IHt9O1xuXG4gICAgLy8gb3VyIGtleXBhZCBpcyBpbiB0b29sdGlwXG4gICAgLy8gaW4gdGhpcyB3YXkgd2Ugc2VlIGlmIGV2ZW50IHdhcyB0cmlnZ2VyZWQgZnJvbSB0aGUga2V5cGFkXG4gICAgY29uc3QgaXNLZXlwYWRPcGVuID0gY3VycmVudFRhcmdldCAmJiBjdXJyZW50VGFyZ2V0LmNsb3Nlc3QoJ1tyb2xlPXRvb2x0aXBdJyk7XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRXaXRoUm9sZVRvb2x0aXAoZWxlbWVudCwgZGVwdGggPSAwKSB7XG4gICAgICAvLyBvbmx5IHJ1biB0aGlzIG1heCAxNiB0aW1lc1xuICAgICAgaWYgKCFlbGVtZW50IHx8IGRlcHRoID49IDE2KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cbiAgICAgIGlmICghcGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgaWYgKHBhcmVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnZXRQYXJlbnRXaXRoUm9sZVRvb2x0aXAocGFyZW50LCBkZXB0aCArIDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERlZXBDaGlsZERhdGFLZXlwYWQoZWxlbWVudCwgZGVwdGggPSAwKSB7XG4gICAgICAvLyBvbmx5IHJ1biB0aGlzIG1heCA0IHRpbWVzXG4gICAgICBpZiAoIWVsZW1lbnQgfHwgZGVwdGggPj0gNCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gZWxlbWVudD8uY2hpbGRyZW4/LlswXTtcblxuICAgICAgaWYgKCFjaGlsZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmIChjaGlsZC5hdHRyaWJ1dGVzICYmIGNoaWxkLmF0dHJpYnV0ZXNbJ2RhdGEta2V5cGFkJ10pIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2V0RGVlcENoaWxkRGF0YUtleXBhZChjaGlsZCwgZGVwdGggKyAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRXaXRoVG9vbHRpcFJvbGUgPSBnZXRQYXJlbnRXaXRoUm9sZVRvb2x0aXAocmVsYXRlZFRhcmdldCk7XG4gICAgY29uc3QgY2hpbGRXaXRoRGF0YUtleXBhZCA9IHBhcmVudFdpdGhUb29sdGlwUm9sZSA/IGdldERlZXBDaGlsZERhdGFLZXlwYWQocGFyZW50V2l0aFRvb2x0aXBSb2xlKSA6IG51bGw7XG5cbiAgICBpZiAoIXJlbGF0ZWRUYXJnZXQgfHwgIWN1cnJlbnRUYXJnZXQgfHwgIWNoaWxkV2l0aERhdGFLZXlwYWQ/LmF0dHJpYnV0ZXNbJ2RhdGEta2V5cGFkJ10pIHtcbiAgICAgIC8vIGlmIGV2ZW50IHdhcyB0cmlnZXJlZCBmcm9tIHRoZSBrZXlwYWQsIGF2b2lkIGNsb3NpbmcgdGhlIGtleXBhZFxuICAgICAgaWYgKCFpc0tleXBhZE9wZW4pIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZUFuc3dlckJsb2NrOiAnJyB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZWxzZSB7XG4gICAgLy8gICAgIC8vIEp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3NlOlxuICAgIC8vICAgICBjb25zb2xlLmxvZygnXFxuXFxuTmV3IGNoaWxkV2l0aERhdGFLZXlwYWQnLCBjaGlsZFdpdGhEYXRhS2V5cGFkKTtcbiAgICAvL1xuICAgIC8vICAgICBpZiAoSVNfU0FGQVJJKSB7XG4gICAgLy8gICAgICAgICAvLyAoSVNfU0FGQVJJICYmICFyZWxhdGVkVGFyZ2V0Py5vZmZzZXRQYXJlbnQ/LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uYXR0cmlidXRlcz8uWydkYXRhLWtleXBhZCddKVxuICAgIC8vICAgICAgICAgY29uc29sZS5sb2coJ1doYXQgd2FzIGJlaW5nIHVzZWQnLCByZWxhdGVkVGFyZ2V0Py5vZmZzZXRQYXJlbnQ/LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXSk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAvLyAoIUlTX1NBRkFSSSAmJiAhcmVsYXRlZFRhcmdldD8ub2Zmc2V0UGFyZW50Py5jaGlsZHJlblswXT8uYXR0cmlidXRlcz8uWydkYXRhLWtleXBhZCddKSB8fFxuICAgIC8vICAgICAgICAgY29uc29sZS5sb2coJ1doYXQgd2FzIGJlaW5nIHVzZWQnLCByZWxhdGVkVGFyZ2V0Py5vZmZzZXRQYXJlbnQ/LmNoaWxkcmVuWzBdKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgfTtcblxuICBzZXRUb29sdGlwUmVmKHJlZikge1xuICAgIC8vIFNhZmFyaSBIYWNrOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDI3NjQ0OTUvNTc1NzYzNVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHJlZiAmJiBJU19TQUZBUkkpIHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltyb2xlPSd0b29sdGlwJ11cIik7XG5cbiAgICAgICAgaWYgKGRpdikge1xuICAgICAgICAgIGNvbnN0IGVsID0gZGl2LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBtb2RlbCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGFjdGl2ZUFuc3dlckJsb2NrLCBzaG93Q29ycmVjdCwgc2Vzc2lvbiwgdG9vbHRpcENvbnRhaW5lclJlZiB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7XG4gICAgICBjb25maWcsXG4gICAgICBjb3JyZWN0bmVzcyxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXh0cmFDU1NSdWxlcyxcbiAgICAgIHZpZXcsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zLFxuICAgICAgcmF0aW9uYWxlLFxuICAgICAgZmVlZGJhY2ssXG4gICAgICBhbmltYXRpb25zRGlzYWJsZWQsXG4gICAgICBwcmludE1vZGUsXG4gICAgICBhbHdheXNTaG93Q29ycmVjdCxcbiAgICAgIGxhbmd1YWdlLFxuICAgIH0gPSBtb2RlbCB8fCB7fTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBzaG93Tm90ZSxcbiAgICAgIG5vdGUsXG4gICAgICBwcm9tcHQsXG4gICAgICByZXNwb25zZXMsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBlcXVhdGlvbkVkaXRvcixcbiAgICAgIGN1c3RvbUtleXMsXG4gICAgICBpZCxcbiAgICAgIGVudjogeyBtb2RlLCByb2xlIH0gPSB7fSxcbiAgICB9ID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IGRpc3BsYXlOb3RlID0gKHNob3dDb3JyZWN0IHx8IChtb2RlID09PSAndmlldycgJiYgcm9sZSA9PT0gJ2luc3RydWN0b3InKSkgJiYgc2hvd05vdGUgJiYgbm90ZTtcbiAgICBjb25zdCBlbXB0eVJlc3BvbnNlID0gaXNFbXB0eShyZXNwb25zZXMpO1xuICAgIGNvbnN0IHNob3dDb3JyZWN0QW5zd2VyVG9nZ2xlID0gIWVtcHR5UmVzcG9uc2UgJiYgY29ycmVjdG5lc3MgJiYgY29ycmVjdG5lc3MuY29ycmVjdG5lc3MgIT09ICdjb3JyZWN0JztcbiAgICBjb25zdCB0b29sdGlwTW9kZUVuYWJsZWQgPSBkaXNhYmxlZCAmJiBjb3JyZWN0bmVzcztcbiAgICBjb25zdCBhZGRpdGlvbmFsS2V5cyA9IGdlbmVyYXRlQWRkaXRpb25hbEtleXMoY3VzdG9tS2V5cyk7XG4gICAgY29uc3QgY29ycmVjdCA9IGNvcnJlY3RuZXNzICYmIGNvcnJlY3RuZXNzLmNvcnJlY3Q7XG4gICAgY29uc3Qgc3RhdGljTGF0ZXggPSBwcmVwYXJlRm9yU3RhdGljKG1vZGVsLCB0aGlzLnN0YXRlKSB8fCAnJztcbiAgICBjb25zdCB2aWV3TW9kZSA9IGRpc2FibGVkICYmICFjb3JyZWN0bmVzcztcbiAgICBjb25zdCBzdHVkZW50UHJpbnRNb2RlID0gcHJpbnRNb2RlICYmICFhbHdheXNTaG93Q29ycmVjdDtcbiAgICBjb25zdCBzaG93UmF0aW9uYWxlID0gcmF0aW9uYWxlICYmIChoYXNUZXh0KHJhdGlvbmFsZSkgfHwgaGFzTWVkaWEocmF0aW9uYWxlKSk7XG4gICAgY29uc3Qgc2hvd1RlYWNoZXJJbnN0cnVjdGlvbnMgPVxuICAgICAgdGVhY2hlckluc3RydWN0aW9ucyAmJiAoaGFzVGV4dCh0ZWFjaGVySW5zdHJ1Y3Rpb25zKSB8fCBoYXNNZWRpYSh0ZWFjaGVySW5zdHJ1Y3Rpb25zKSk7XG5cbiAgICBjb25zdCBwcmludFZpZXcgPSAoXG4gICAgICA8UHJpbnRDb250YWluZXI+XG4gICAgICAgIDxtcS5TdGF0aWNcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdGF0aWMtbWF0aFwiXG4gICAgICAgICAgcmVmPXsobXFTdGF0aWMpID0+IHtcbiAgICAgICAgICAgIGlmIChtcVN0YXRpYykgdGhpcy5tcVN0YXRpYyA9IG1xU3RhdGljO1xuICAgICAgICAgIH19XG4gICAgICAgICAgbGF0ZXg9e3N0YXRpY0xhdGV4fVxuICAgICAgICAgIG9uU3ViRmllbGRDaGFuZ2U9e3RoaXMuc3ViRmllbGRDaGFuZ2VkfVxuICAgICAgICAgIGdldEZpZWxkTmFtZT17dGhpcy5nZXRGaWVsZE5hbWV9XG4gICAgICAgICAgc2V0SW5wdXQ9e3RoaXMuc2V0SW5wdXR9XG4gICAgICAgICAgb25TdWJGaWVsZEZvY3VzPXt0aGlzLm9uU3ViRmllbGRGb2N1c31cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAvPlxuICAgICAgPC9QcmludENvbnRhaW5lcj5cbiAgICApO1xuXG4gICAgY29uc3QgbWlkQ29udGVudCA9IChcbiAgICAgIDxNYWluQ29udGVudD5cbiAgICAgICAge21vZGUgPT09ICdnYXRoZXInICYmIDxTck9ubHk+TWF0aCBFcXVhdGlvbiBSZXNwb25zZSBRdWVzdGlvbjwvU3JPbmx5Pn1cblxuICAgICAgICB7dmlld01vZGUgJiZcbiAgICAgICAgICBzaG93VGVhY2hlckluc3RydWN0aW9ucyAmJlxuICAgICAgICAgICghYW5pbWF0aW9uc0Rpc2FibGVkID8gKFxuICAgICAgICAgICAgPFN0eWxlZENvbGxhcHNpYmxlIGxhYmVscz17eyBoaWRkZW46ICdTaG93IFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJywgdmlzaWJsZTogJ0hpZGUgVGVhY2hlciBJbnN0cnVjdGlvbnMnIH19PlxuICAgICAgICAgICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogdGVhY2hlckluc3RydWN0aW9ucyB9fSAvPlxuICAgICAgICAgICAgPC9TdHlsZWRDb2xsYXBzaWJsZT5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHRlYWNoZXJJbnN0cnVjdGlvbnMgfX0gLz5cbiAgICAgICAgICApKX1cblxuICAgICAgICB7cHJvbXB0ICYmIChcbiAgICAgICAgICA8UHJvbXB0Q29udGFpbmVyPlxuICAgICAgICAgICAgPFByZXZpZXdQcm9tcHQgcHJvbXB0PXtwcm9tcHR9IC8+XG4gICAgICAgICAgPC9Qcm9tcHRDb250YWluZXI+XG4gICAgICAgICl9XG5cbiAgICAgICAge3N0dWRlbnRQcmludE1vZGUgPyAoXG4gICAgICAgICAgcHJpbnRWaWV3XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFJlYWRhYmxlIGZhbHNlPlxuICAgICAgICAgICAgPElucHV0QW5kS2V5cGFkQ29udGFpbmVyIHRhYkluZGV4PXswfT5cbiAgICAgICAgICAgICAge3Jlc3BvbnNlVHlwZSA9PT0gUmVzcG9uc2VUeXBlcy5zaW1wbGUgJiYgKFxuICAgICAgICAgICAgICAgIDxTaW1wbGVRdWVzdGlvbkJsb2NrXG4gICAgICAgICAgICAgICAgICBvblNpbXBsZVJlc3BvbnNlQ2hhbmdlPXt0aGlzLm9uU2ltcGxlUmVzcG9uc2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBzaG93Q29ycmVjdD17c2hvd0NvcnJlY3R9XG4gICAgICAgICAgICAgICAgICBlbXB0eVJlc3BvbnNlPXtlbXB0eVJlc3BvbnNlfVxuICAgICAgICAgICAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbj17c2Vzc2lvbn1cbiAgICAgICAgICAgICAgICAgIG9uU3ViRmllbGRGb2N1cz17dGhpcy5vblN1YkZpZWxkRm9jdXN9XG4gICAgICAgICAgICAgICAgICBzaG93S2V5cGFkPXshIWFjdGl2ZUFuc3dlckJsb2NrfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAge3Jlc3BvbnNlVHlwZSA9PT0gUmVzcG9uc2VUeXBlcy5hZHZhbmNlZCAmJiAoXG4gICAgICAgICAgICAgICAgPEV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgIHJlZj17dG9vbHRpcENvbnRhaW5lclJlZn1cbiAgICAgICAgICAgICAgICAgIGlzSW5jb3JyZWN0PXshZW1wdHlSZXNwb25zZSAmJiAhY29ycmVjdCAmJiAhc2hvd0NvcnJlY3R9XG4gICAgICAgICAgICAgICAgICBpc0NvcnJlY3Q9eyFlbXB0eVJlc3BvbnNlICYmIChjb3JyZWN0IHx8IHNob3dDb3JyZWN0KX1cbiAgICAgICAgICAgICAgICAgIHNob3dDb3JyZWN0bmVzcz17IWVtcHR5UmVzcG9uc2UgJiYgZGlzYWJsZWQgJiYgY29ycmVjdG5lc3MgJiYgIXZpZXd9XG4gICAgICAgICAgICAgICAgICBjb3JyZWN0QW5zd2VyU2hvd249e3Nob3dDb3JyZWN0fVxuICAgICAgICAgICAgICAgICAgcHJpbnRDb3JyZWN0PXtwcmludE1vZGUgJiYgYWx3YXlzU2hvd0NvcnJlY3R9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgcmVmPXsocmVmKSA9PiB0aGlzLnNldFRvb2x0aXBSZWYocmVmKX1cbiAgICAgICAgICAgICAgICAgICAgZW50ZXJUb3VjaERlbGF5PXswfVxuICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICBvcGVuPXshIWFjdGl2ZUFuc3dlckJsb2NrfVxuICAgICAgICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgICBwb3BwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogdG9vbHRpcENvbnRhaW5lclJlZj8uY3VycmVudCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzY1MHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJyYgLk11aVRvb2x0aXAtYXJyb3cnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBbMCwgOF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnk6ICd2aWV3cG9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiA4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncHVBY2NlbGVyYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJ2luaXRpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17T2JqZWN0LmtleXMoc2Vzc2lvbi5hbnN3ZXJzKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgKGFuc3dlcklkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKGFuc3dlcklkID09PSBhY3RpdmVBbnN3ZXJCbG9jayAmJiAhKHNob3dDb3JyZWN0IHx8IGRpc2FibGVkKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxSZXNwb25zZUNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEta2V5cGFkPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YW5zd2VySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpblRvcDogdGhpcy5tcVN0YXRpYyAmJiB0aGlzLm1xU3RhdGljLmlucHV0Lm9mZnNldEhlaWdodCAtIDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGdldEtleVBhZFdpZHRoKGFkZGl0aW9uYWxLZXlzLCBlcXVhdGlvbkVkaXRvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIb3Jpem9udGFsS2V5cGFkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsS2V5cz17YWRkaXRpb25hbEtleXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPXtlcXVhdGlvbkVkaXRvciB8fCBERUZBVUxUX0tFWVBBRF9WQVJJQU5UfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvUmVzcG9uc2VDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bXEuU3RhdGljXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdGF0aWMtbWF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZWY9eyhtcVN0YXRpYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXFTdGF0aWMpIHRoaXMubXFTdGF0aWMgPSBtcVN0YXRpYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXRleD17c3RhdGljTGF0ZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1YkZpZWxkQ2hhbmdlPXt0aGlzLnN1YkZpZWxkQ2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZpZWxkTmFtZT17dGhpcy5nZXRGaWVsZE5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dD17dGhpcy5zZXRJbnB1dH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3ViRmllbGRGb2N1cz17dGhpcy5vblN1YkZpZWxkRm9jdXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvSW5wdXRBbmRLZXlwYWRDb250YWluZXI+XG4gICAgICAgICAgPC9SZWFkYWJsZT5cbiAgICAgICAgKX1cblxuICAgICAgICB7dmlld01vZGUgJiYgZGlzcGxheU5vdGUgJiYgPE5vdGUgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBgPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiAke25vdGV9YCB9fSAvPn1cblxuICAgICAgICB7dmlld01vZGUgJiZcbiAgICAgICAgICBzaG93UmF0aW9uYWxlICYmXG4gICAgICAgICAgKCFhbmltYXRpb25zRGlzYWJsZWQgPyAoXG4gICAgICAgICAgICA8Q29sbGFwc2libGUgbGFiZWxzPXt7IGhpZGRlbjogJ1Nob3cgUmF0aW9uYWxlJywgdmlzaWJsZTogJ0hpZGUgUmF0aW9uYWxlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHJhdGlvbmFsZSB9fSAvPlxuICAgICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHJhdGlvbmFsZSB9fSAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NYWluQ29udGVudD5cbiAgICApO1xuXG4gICAgaWYgKHRvb2x0aXBNb2RlRW5hYmxlZCAmJiAoc2hvd0NvcnJlY3RBbnN3ZXJUb2dnbGUgfHwgc2hvd1RlYWNoZXJJbnN0cnVjdGlvbnMgfHwgc2hvd1JhdGlvbmFsZSB8fCBmZWVkYmFjaykpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRVaUxheW91dFxuICAgICAgICAgIGV4dHJhQ1NTUnVsZXM9e2V4dHJhQ1NTUnVsZXN9XG4gICAgICAgICAgcmVmPXsocikgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWZpbmQtZG9tLW5vZGVcbiAgICAgICAgICAgIGNvbnN0IGRvbU5vZGUgPSBSZWFjdERPTS5maW5kRE9NTm9kZShyKTtcblxuICAgICAgICAgICAgdGhpcy5yb290ID0gZG9tTm9kZSB8fCB0aGlzLnJvb3Q7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdHlsZWRUb29sdGlwXG4gICAgICAgICAgICBpbnRlcmFjdGl2ZVxuICAgICAgICAgICAgZW50ZXJUb3VjaERlbGF5PXswfVxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCJcbiAgICAgICAgICAgIHNsb3RQcm9wcz17e1xuICAgICAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICAgICAgc3g6ICh0aGVtZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGAke2NvbG9yLnByaW1hcnlMaWdodCgpfSAhaW1wb3J0YW50YCxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvci50ZXh0KCksXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Y29sb3Iuc2Vjb25kYXJ5KCl9YCxcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAnJiA6bm90KC5NYXRoSmF4KSA+IHRhYmxlIHRyJzoge1xuICAgICAgICAgICAgICAgICAgICAnJjpudGgtY2hpbGQoMm4pJzoge1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3Vuc2V0ICFpbXBvcnRhbnQnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFswLCAyXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPE1haW5Db250ZW50PlxuICAgICAgICAgICAgICAgICAge3Nob3dDb3JyZWN0QW5zd2VyVG9nZ2xlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZENvcnJlY3RBbnN3ZXJUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZT17bGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgc2hvd1xuICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZWQ9e3Nob3dDb3JyZWN0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlPXt0aGlzLnRvZ2dsZVNob3dDb3JyZWN0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L01haW5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAge3Nob3dUZWFjaGVySW5zdHJ1Y3Rpb25zICYmIChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRDb2xsYXBzaWJsZVxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJjb2xsYXBzaWJsZS10ZWFjaGVyLWluc3RydWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17e1xuICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogJ1Nob3cgVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICdIaWRlIFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFByZXZpZXdQcm9tcHQgcHJvbXB0PXt0ZWFjaGVySW5zdHJ1Y3Rpb25zfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRDb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkaXNwbGF5Tm90ZSAmJiBoYXNUZXh0KG5vdGUpICYmIChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRDb2xsYXBzaWJsZVxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJjb2xsYXBzaWJsZS1ub3RlXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiB0cmFuc2xhdG9yLnQoJ2NvbW1vbjpzaG93Tm90ZScsIHsgbG5nOiBsYW5ndWFnZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cmFuc2xhdG9yLnQoJ2NvbW1vbjpoaWRlTm90ZScsIHsgbG5nOiBsYW5ndWFnZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFByZXZpZXdQcm9tcHQgcHJvbXB0PXtub3RlfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRDb2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge3Nob3dSYXRpb25hbGUgJiYgKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZENvbGxhcHNpYmxlXG4gICAgICAgICAgICAgICAgICAgIGtleT1cImNvbGxhcHNpYmxlLXJhdGlvbmFsZVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17e1xuICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogJ1Nob3cgUmF0aW9uYWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAnSGlkZSBSYXRpb25hbGUnLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8UHJldmlld1Byb21wdCBwcm9tcHQ9e3JhdGlvbmFsZX0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ29sbGFwc2libGU+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHtmZWVkYmFjayAmJiA8RmVlZGJhY2sgY29ycmVjdG5lc3M9e2NvcnJlY3RuZXNzLmNvcnJlY3RuZXNzfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bWlkQ29udGVudH1cbiAgICAgICAgICA8L1N0eWxlZFRvb2x0aXA+XG4gICAgICAgIDwvU3R5bGVkVWlMYXlvdXQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkVWlMYXlvdXRcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBleHRyYUNTU1J1bGVzPXtleHRyYUNTU1J1bGVzfVxuICAgICAgICByZWY9eyhyKSA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWZpbmQtZG9tLW5vZGVcbiAgICAgICAgICBjb25zdCBkb21Ob2RlID0gUmVhY3RET00uZmluZERPTU5vZGUocik7XG5cbiAgICAgICAgICB0aGlzLnJvb3QgPSBkb21Ob2RlIHx8IHRoaXMucm9vdDtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge21pZENvbnRlbnR9XG4gICAgICA8L1N0eWxlZFVpTGF5b3V0PlxuICAgICk7XG4gIH1cbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBjbGFzcyBuYW1lcyBmb3IgSFRNTCBzdHJpbmcgZ2VuZXJhdGlvblxuY29uc3QgZ2V0QmxvY2tDbGFzc05hbWVzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIGJsb2NrQ29udGFpbmVyOiAnYmxvY2stY29udGFpbmVyJyxcbiAgICBibG9ja1Jlc3BvbnNlOiAnYmxvY2stcmVzcG9uc2UnLFxuICAgIGJsb2NrTWF0aDogJ2Jsb2NrLW1hdGgnLFxuICB9O1xufTtcblxuLy8gQ1NTIGZvciBibG9jayBjbGFzc2VzIHVzZWQgaW4gSFRNTCBzdHJpbmcgZ2VuZXJhdGlvblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3Qgc3R5bGVJZCA9ICdtYXRoLWlubGluZS1ibG9jay1zdHlsZXMnO1xuICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0eWxlSWQpKSB7XG4gICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAgIC5ibG9jay1jb250YWluZXIge1xuICAgICAgICBtYXJnaW46IDhweCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgZ3JleSAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgICAgLmJsb2NrLXJlc3BvbnNlIHtcbiAgICAgICAgY29sb3I6IGdyZXk7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDRweCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI2JkYmRiZCAhaW1wb3J0YW50O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgZmxleC1ncm93OiAwO1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICAgICAgfVxuICAgICAgLmJsb2NrLW1hdGgge1xuICAgICAgICBjb2xvcjogJHtjb2xvci50ZXh0KCl9O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9yLmJhY2tncm91bmQoKX07XG4gICAgICAgIHBhZGRpbmc6IDRweCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgfVxuICAgICAgLmJsb2NrLW1hdGggPiAubXEtbWF0aC1tb2RlID4gLm1xLWhhc0N1cnNvciA+IC5tcS1jdXJzb3Ige1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgICAgLnNyLW9ubHkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IC0xMDAwMHB4O1xuICAgICAgICB0b3A6IGF1dG87XG4gICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgIGhlaWdodDogMXB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuICAgICAgLnN0YXRpYy1tYXRoID4gLm1xLXJvb3QtYmxvY2sgPiAubXEtZWRpdGFibGUtZmllbGQge1xuICAgICAgICBib3JkZXItY29sb3I6ICR7Y29sb3IudGV4dCgpfTtcbiAgICAgIH1cbiAgICBgO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG59XG5cbmNvbnN0IFN0eWxlZFVpTGF5b3V0ID0gc3R5bGVkKFVpTGF5b3V0KSgoKSA9PiAoe1xuICBjb2xvcjogY29sb3IudGV4dCgpLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJhY2tncm91bmQoKSxcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG59KSk7XG5cbmNvbnN0IFN0eWxlZFRvb2x0aXAgPSBzdHlsZWQoVG9vbHRpcCkoe1xuICAvLyBTdHlsZXMgYXBwbGllZCB2aWEgc2xvdFByb3BzLnN4IGJlbG93XG59KTtcblxuY29uc3QgUHJvbXB0Q29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBtYXJnaW5Cb3R0b206IHRoZW1lLnNwYWNpbmcoMiksXG59KSk7XG5cbmNvbnN0IE1haW5Db250ZW50ID0gc3R5bGVkKCdkaXYnKSh7XG4gIHdpZHRoOiAnMTAwJScsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJhY2tncm91bmQoKSxcbiAgY29sb3I6IGNvbG9yLnRleHQoKSxcbn0pO1xuXG5jb25zdCBOb3RlID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBwYWRkaW5nQm90dG9tOiB0aGVtZS5zcGFjaW5nKDIpLFxufSkpO1xuXG5jb25zdCBTdHlsZWRDb2xsYXBzaWJsZSA9IHN0eWxlZChDb2xsYXBzaWJsZSkoKHsgdGhlbWUgfSkgPT4gKHtcbiAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDIpLFxufSkpO1xuXG5jb25zdCBSZXNwb25zZUNvbnRhaW5lciA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgekluZGV4OiAxMCxcbiAgbWluV2lkdGg6ICc0MDBweCcsXG4gIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZygyKSxcbn0pKTtcblxuY29uc3QgRXhwcmVzc2lvbiA9IHN0eWxlZCgnZGl2Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogKHByb3ApID0+XG4gICAgIVsnaXNJbmNvcnJlY3QnLCAnaXNDb3JyZWN0JywgJ3Nob3dDb3JyZWN0bmVzcycsICdjb3JyZWN0QW5zd2VyU2hvd24nLCAncHJpbnRDb3JyZWN0J10uaW5jbHVkZXMocHJvcCksXG59KSgoeyB0aGVtZSwgaXNJbmNvcnJlY3QsIGlzQ29ycmVjdCwgc2hvd0NvcnJlY3RuZXNzLCBjb3JyZWN0QW5zd2VyU2hvd24sIHByaW50Q29ycmVjdCB9KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gaXNJbmNvcnJlY3QgPyBjb2xvci5pbmNvcnJlY3QoKSA6IGlzQ29ycmVjdCA/IGNvbG9yLmNvcnJlY3QoKSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIG1heFdpZHRoOiAnZml0LWNvbnRlbnQnLFxuICAgIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMC4yNSksXG4gICAgLi4uKHNob3dDb3JyZWN0bmVzcyAmJiB7XG4gICAgICBib3JkZXI6IGJvcmRlckNvbG9yID8gYDJweCBzb2xpZCAke2JvcmRlckNvbG9yfSAhaW1wb3J0YW50YCA6ICcycHggc29saWQnLFxuICAgIH0pLFxuICAgIC4uLighc2hvd0NvcnJlY3RuZXNzICYmXG4gICAgICBib3JkZXJDb2xvciAmJiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiBgJHtib3JkZXJDb2xvcn0gIWltcG9ydGFudGAsXG4gICAgICB9KSxcbiAgICAuLi4oY29ycmVjdEFuc3dlclNob3duICYmIHtcbiAgICAgIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgICBsZXR0ZXJTcGFjaW5nOiAnMC41cHgnLFxuICAgIH0pLFxuICAgIC4uLihwcmludENvcnJlY3QgJiYge1xuICAgICAgYm9yZGVyOiBgMnB4IHNvbGlkICR7Y29sb3IuY29ycmVjdCgpfSAhaW1wb3J0YW50YCxcbiAgICB9KSxcbiAgICAnJiAubXEtbWF0aC1tb2RlJzoge1xuICAgICAgJyYgLm1xLXJvb3QtYmxvY2snOiB7XG4gICAgICAgIHBhZGRpbmdSaWdodDogJzAgIWltcG9ydGFudCcsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAnMCAhaW1wb3J0YW50JyxcbiAgICAgICAgJyYgLm1xLWVkaXRhYmxlLWZpZWxkJzoge1xuICAgICAgICAgIG1pbldpZHRoOiAnMTBweCcsXG4gICAgICAgICAgcGFkZGluZzogdGhlbWUuc3BhY2luZygwLjQpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgICcmIHN1cCc6IHtcbiAgICAgICAgdG9wOiAwLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufSk7XG5cbmNvbnN0IElucHV0QW5kS2V5cGFkQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSh7XG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAnJiAubXEtb3ZlcmFycm93LWlubmVyJzoge1xuICAgIGJvcmRlcjogJ25vbmUgIWltcG9ydGFudCcsXG4gICAgcGFkZGluZzogJzAgIWltcG9ydGFudCcsXG4gIH0sXG4gICcmIC5tcS1vdmVyYXJyb3ctaW5uZXItcmlnaHQnOiB7XG4gICAgZGlzcGxheTogJ25vbmUgIWltcG9ydGFudCcsXG4gIH0sXG4gICcmIC5tcS1vdmVyYXJyb3ctaW5uZXItbGVmdCc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSAhaW1wb3J0YW50JyxcbiAgfSxcbiAgJyYgLm1xLW92ZXJhcnJvdy5tcS1hcnJvdy1ib3RoJzoge1xuICAgIG1pbldpZHRoOiAnMS4yM2VtJyxcbiAgICAnJiAqJzoge1xuICAgICAgbGluZUhlaWdodDogJzEgIWltcG9ydGFudCcsXG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICB0b3A6ICctMC40ZW0nLFxuICAgICAgbGVmdDogJy0xcHgnLFxuICAgIH0sXG4gICAgJyY6YWZ0ZXInOiB7XG4gICAgICB0b3A6ICctMi40ZW0nLFxuICAgICAgcmlnaHQ6ICctMXB4JyxcbiAgICB9LFxuICAgICcmLm1xLWVtcHR5OmFmdGVyJzoge1xuICAgICAgdG9wOiAnLTAuNDVlbScsXG4gICAgfSxcbiAgfSxcbiAgJyYgLm1xLW92ZXJhcnJvdy5tcS1hcnJvdy1yaWdodCc6IHtcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICB0b3A6ICctMC40ZW0nLFxuICAgICAgcmlnaHQ6ICctMXB4JyxcbiAgICB9LFxuICB9LFxuICAnJiAubXEtbG9uZ2Rpdi1pbm5lcic6IHtcbiAgICBib3JkZXJUb3A6ICcxcHggc29saWQgIWltcG9ydGFudCcsXG4gICAgcGFkZGluZ1RvcDogJzEuNXB4ICFpbXBvcnRhbnQnLFxuICB9LFxuICAnJiAubXEtcGFyYWxsZWxvZ3JhbSc6IHtcbiAgICBsaW5lSGVpZ2h0OiAwLjg1LFxuICB9LFxufSk7XG5cbmNvbnN0IFByaW50Q29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBtYXJnaW5Cb3R0b206IHRoZW1lLnNwYWNpbmcoMSksXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbn0pKTtcblxuY29uc3QgU3JPbmx5ID0gc3R5bGVkKCdoMicpKHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6ICctMTAwMDBweCcsXG4gIHRvcDogJ2F1dG8nLFxuICB3aWR0aDogJzFweCcsXG4gIGhlaWdodDogJzFweCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbn0pO1xuXG5jb25zdCBTdHlsZWRDb3JyZWN0QW5zd2VyVG9nZ2xlID0gc3R5bGVkKENvcnJlY3RBbnN3ZXJUb2dnbGUpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGNvbG9yOiBjb2xvci50ZXh0KCksXG4gIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygyKSxcbn0pKTtcblxuZXhwb3J0IGRlZmF1bHQgTWFpbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxvQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsa0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFNBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLG9CQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBVyxXQUFBLEdBQUFaLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBWSxTQUFBLEdBQUFiLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxNQUFNO0VBQUVhO0FB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