@agilemotion/oui-react-js 2.0.26 → 2.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/AuthImage.js +68 -0
  2. package/dist/RestService.js +7 -2
  3. package/dist/components/AlertBar.js +2 -2
  4. package/dist/components/Button.js +59 -7
  5. package/dist/components/DataGrid.js +42 -16
  6. package/dist/components/DocumentTemplateDesignerComponent.js +2 -2
  7. package/dist/components/FileThumb.js +48 -15
  8. package/dist/components/TabPanel.js +14 -3
  9. package/dist/components/WordDocumentViewer.js +2 -2
  10. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +6 -2
  11. package/dist/components/form/BaseField.js +4 -2
  12. package/dist/components/form/Checkbox.js +3 -2
  13. package/dist/components/form/FieldSet.js +2 -2
  14. package/dist/components/form/Form.css +1 -1
  15. package/dist/components/form/Form.js +40 -38
  16. package/dist/components/form/GridField.js +6 -5
  17. package/dist/components/form/RadioGroup.js +5 -5
  18. package/dist/components/form/UploadField.js +40 -7
  19. package/dist/components/layout/Layout.js +9 -1
  20. package/dist/components/layout/View.css +2 -0
  21. package/dist/components/media/ChatViewer.js +103 -0
  22. package/dist/components/media/TrainingRoom.js +5 -5
  23. package/dist/components/media/VCRoomParticipant.js +11 -11
  24. package/dist/components/media/VCRoomWorkspace.js +19 -4
  25. package/dist/components/media/VideoPlayer.js +61 -7
  26. package/dist/components/media/chat/ChatRoom.js +37 -28
  27. package/dist/components/media/chat/PollContainer.js +85 -18
  28. package/dist/documentDownload.js +79 -0
  29. package/dist/js/ProcurementMeetings.js +11 -4
  30. package/dist/view/PortalDashboard.js +6 -5
  31. package/package.json +1 -1
@@ -10,14 +10,12 @@ var _Utils = _interopRequireDefault(require("../../Utils"));
10
10
  var _Section = _interopRequireDefault(require("./Section"));
11
11
  require("./Form.css");
12
12
  var _RestService = require("../../RestService");
13
- var _asyncMutex = require("async-mutex");
14
13
  var _Observable = _interopRequireDefault(require("../../event/Observable"));
15
14
  var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
16
15
  var _ServiceCallActionHandler = _interopRequireDefault(require("../../event/ServiceCallActionHandler"));
17
16
  var _DynamicJS = _interopRequireDefault(require("../../DynamicJS"));
18
17
  var _EventType = _interopRequireDefault(require("../../event/EventType"));
19
18
  var _Event = _interopRequireDefault(require("../../event/Event"));
20
- var _clear = require("@testing-library/user-event/dist/clear");
21
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
21
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -61,6 +59,42 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
61
59
  // produced React #185).
62
60
  const fieldValidity = _react.default.useRef(new Map());
63
61
  let sectionCounter = 0;
62
+ function doVallidateAll() {
63
+ // Explicit "force-validate every field" command. Replaces the
64
+ // old hack of reading form.value purely for its side effects.
65
+ // Fields write into fieldValidity via doValidation as a side
66
+ // effect of validate; we then walk the register for invalid
67
+ // fields to drive UX (scrollTo first, refresh container error
68
+ // callback) — same UX the getter used to provide, now opt-in.
69
+ for (const field of fields) {
70
+ if (!_Utils.default.isNull(field.handle) && !_Utils.default.isNull(field.handle.api)) {
71
+ // Pass the actual current value so doValidation's
72
+ // (currentValue, required, markers) cache key
73
+ // reflects reality. Without this we were passing
74
+ // null, which made cache hits opaque in logs and
75
+ // forced Utils.validateField to fall back to
76
+ // values[id] every time.
77
+ const path = getValuePath(field.id, null);
78
+ const currentValue = !_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject) ? path.valueObject[path.valueProperty] : null;
79
+ field.handle.api.validate(values.current, currentValue);
80
+ }
81
+ }
82
+ let firstInvalid = null;
83
+ for (const field of fields) {
84
+ if (field.bindValueToForm === false) continue;
85
+ const v = fieldValidity.current.get(field.id);
86
+ if (v && v.valid === false) {
87
+ doValidateParent(field, true, false);
88
+ if (firstInvalid === null) firstInvalid = field;
89
+ }
90
+ }
91
+ if (!_Utils.default.isNull(firstInvalid) && !_Utils.default.isNull(firstInvalid.handle) && !_Utils.default.isNull(firstInvalid.handle.api) && typeof firstInvalid.handle.api.scrollTo === 'function') {
92
+ firstInvalid.handle.api.scrollTo();
93
+ }
94
+ if (!_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
95
+ containerErrorCallback.current(fieldParentErrors);
96
+ }
97
+ }
64
98
  const api = () => {
65
99
  return {
66
100
  get id() {
@@ -97,40 +131,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
97
131
  fieldValidity.current.delete(id);
98
132
  },
99
133
  validateAll: () => {
100
- // Explicit "force-validate every field" command. Replaces the
101
- // old hack of reading form.value purely for its side effects.
102
- // Fields write into fieldValidity via doValidation as a side
103
- // effect of validate; we then walk the register for invalid
104
- // fields to drive UX (scrollTo first, refresh container error
105
- // callback) — same UX the getter used to provide, now opt-in.
106
- for (const field of fields) {
107
- if (!_Utils.default.isNull(field.handle) && !_Utils.default.isNull(field.handle.api)) {
108
- // Pass the actual current value so doValidation's
109
- // (currentValue, required, markers) cache key
110
- // reflects reality. Without this we were passing
111
- // null, which made cache hits opaque in logs and
112
- // forced Utils.validateField to fall back to
113
- // values[id] every time.
114
- const path = getValuePath(field.id, null);
115
- const currentValue = !_Utils.default.isNull(path) && !_Utils.default.isNull(path.valueObject) ? path.valueObject[path.valueProperty] : null;
116
- field.handle.api.validate(values.current, currentValue);
117
- }
118
- }
119
- let firstInvalid = null;
120
- for (const field of fields) {
121
- if (field.bindValueToForm === false) continue;
122
- const v = fieldValidity.current.get(field.id);
123
- if (v && v.valid === false) {
124
- doValidateParent(field, true, false);
125
- if (firstInvalid === null) firstInvalid = field;
126
- }
127
- }
128
- if (!_Utils.default.isNull(firstInvalid) && !_Utils.default.isNull(firstInvalid.handle) && !_Utils.default.isNull(firstInvalid.handle.api) && typeof firstInvalid.handle.api.scrollTo === 'function') {
129
- firstInvalid.handle.api.scrollTo();
130
- }
131
- if (!_Utils.default.isNull(containerErrorCallback.current) && _ApplicationManager.default.isFormMarkersEnabled()) {
132
- containerErrorCallback.current(fieldParentErrors);
133
- }
134
+ doVallidateAll();
134
135
  },
135
136
  loadData: (actionConfig, event) => {
136
137
  loadData(actionConfig, config, event ? event.data : null);
@@ -188,6 +189,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
188
189
  // repeated form.value reads cost zero re-renders after the
189
190
  // first paint. The markers gate inside the callback ensures
190
191
  // refreshes only paint when global markers are enabled.
192
+ doVallidateAll();
191
193
  let formValid = true;
192
194
  if (loadingRef.current === false && values.current) {
193
195
  for (const field of fields) {
@@ -710,7 +712,7 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
710
712
  className: props.className,
711
713
  id: props.config.id,
712
714
  style: props.className === 'defaultForm' ? _Utils.default.mergeStyles({
713
- padding: '16px 0',
715
+ padding: '0',
714
716
  margin: '0',
715
717
  overflow: 'auto',
716
718
  maxHeight: '70vh'
@@ -718,4 +720,4 @@ const Form = /*#__PURE__*/_react.default.memo(props => {
718
720
  }, !_Utils.default.isNull(props.config.id) ? render(props.config) : /*#__PURE__*/_react.default.createElement("div", null, "ERROR: A form must have an ID"));
719
721
  });
720
722
  var _default = exports.default = Form;
721
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9hc3luY011dGV4IiwiX09ic2VydmFibGUiLCJfQXBwbGljYXRpb25NYW5hZ2VyIiwiX1NlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsIl9EeW5hbWljSlMiLCJfRXZlbnRUeXBlIiwiX0V2ZW50IiwiX2NsZWFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInVzZVN0eWxlcyIsIm1ha2VTdHlsZXMiLCJ0aGVtZSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJmbGV4V3JhcCIsIndpZHRoIiwidmVydGljYWxBbGlnbiIsInNlbGVjdCIsIm1hcmdpbiIsInNwYWNpbmciLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInNlbGVjdEVtcHR5IiwibWFyZ2luVG9wIiwicm9vdCIsIkZvcm0iLCJSZWFjdCIsIm1lbW8iLCJwcm9wcyIsInZhbHVlcyIsInVzZVJlZiIsIlV0aWxzIiwiaXNOdWxsIiwibWFzdGVyVmFsdWVzIiwic2V0TWFzdGVyVmFsdWVzIiwidXNlU3RhdGUiLCJjb25maWciLCJzZXRDb25maWciLCJwYXJzZUNvbmZpZyIsInZpZXdJZCIsImJpbmRlciIsImZpZWxkcyIsImNvbnRhaW5lckVycm9yQ2FsbGJhY2siLCJzZWN0aW9uSGFuZGxlcyIsImZpZWxkUGFyZW50RXJyb3JzIiwidmlzaWJsZSIsInNldFZpc2libGUiLCJsb2FkaW5nUmVmIiwiZmllbGRWYWxpZGl0eSIsIk1hcCIsInNlY3Rpb25Db3VudGVyIiwiYXBpIiwiaWQiLCJkb1VwZGF0ZVZhbHVlIiwibmFtZSIsInVwZGF0ZVZhbHVlIiwiY2xlYXIiLCJkb0NsZWFyIiwic2V0VmFsdWUiLCJkb0hhbmRsZUNoYW5nZSIsImhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UiLCJvcHRpb25zIiwic2VsZWN0ZWRJZCIsImhhbmRsZUNoYW5nZSIsImdldFZhbHVlUGF0aCIsImFkZEZpZWxkIiwicmVmIiwicGFyZW50SWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJyZW1vdmVGaWVsZCIsInNldEZpZWxkVmFsaWRpdHkiLCJyZXN1bHQiLCJjdXJyZW50Iiwic2V0IiwiY2xlYXJGaWVsZFZhbGlkaXR5IiwiZGVsZXRlIiwidmFsaWRhdGVBbGwiLCJmaWVsZCIsImhhbmRsZSIsInBhdGgiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImZpcnN0SW52YWxpZCIsInYiLCJnZXQiLCJ2YWxpZCIsImRvVmFsaWRhdGVQYXJlbnQiLCJzY3JvbGxUbyIsImFwcGxpY2F0aW9uTWFuYWdlciIsImlzRm9ybU1hcmtlcnNFbmFibGVkIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0IiwiZm9ybVZhbGlkIiwidW5kZWZpbmVkIiwib25WYWxpZGl0eUNoYW5nZSIsIm1lc3NhZ2UiLCJwYXJzZVZhbHVlIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlZFZhbHVlcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9iamVjdFZhbHVlIiwiZGF0YUFycml2ZWRIYW5kbGVyIiwic3BsaWNlIiwidXBkYXRlRXJyb3JzIiwiaXNQYXJlbnRJbnZhbGlkIiwidmFsaWRhdGVGaWVsZCIsInZhbHMiLCJjdXJyZW50VmFsdWVzIiwiZ3JvdXBGaWVsZCIsInZhbGlkYXRpb25Hcm91cCIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwRmllbGRJZCIsImdyaWRGaWVsZFBhdGgiLCJncm91cEZpZWxkVmFsIiwibG9nIiwiVkFMVUVfQ0hBTkdFIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsInJlbmRlciIsImZvcm0iLCJjcmVhdGVFbGVtZW50Iiwia2V5SGFuZGxlciIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsInBhZGRpbmciLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Zvcm0uanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge21ha2VTdHlsZXN9IGZyb20gJ0BtdWkvc3R5bGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgU2VjdGlvbiBmcm9tICcuL1NlY3Rpb24nO1xuaW1wb3J0ICcuL0Zvcm0uY3NzJztcbmltcG9ydCB7aW52b2tlUnBjfSBmcm9tICcuLi8uLi9SZXN0U2VydmljZSc7XG5pbXBvcnQge011dGV4fSBmcm9tICdhc3luYy1tdXRleCc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciBmcm9tICcuLi8uLi9ldmVudC9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcbmltcG9ydCB7Y2xlYXJ9IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQvZGlzdC9jbGVhclwiO1xuXG5jb25zdCB1c2VTdHlsZXMgPSBtYWtlU3R5bGVzKHRoZW1lID0+ICh7XG4gICAgY29udGFpbmVyOiB7XG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgJyYgdHIgdGQnOiB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IHtcbiAgICAgICAgbWFyZ2luOiB0aGVtZS5zcGFjaW5nKDEpLFxuICAgICAgICBtaW5XaWR0aDogMTIwLFxuICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgfSxcbiAgICBzZWxlY3RFbXB0eToge1xuICAgICAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgfSxcbiAgICByb290OiB7fVxufSkpO1xuXG5jb25zdCBGb3JtID0gUmVhY3QubWVtbygocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gUmVhY3QudXNlUmVmKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVzKSA/IHByb3BzLnZhbHVlcyA6IHt9KTtcbiAgICAgICAgY29uc3QgW21hc3RlclZhbHVlcywgc2V0TWFzdGVyVmFsdWVzXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgICAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gUmVhY3QudXNlU3RhdGUoVXRpbHMucGFyc2VDb25maWcocHJvcHMuY29uZmlnLCBwcm9wcy52aWV3SWQpKTtcbiAgICAgICAgY29uc3QgW2JpbmRlcl0gPSBSZWFjdC51c2VTdGF0ZShVdGlscy5pc051bGwocHJvcHMuY29uZmlnLmJpbmRlcikgPyAnUExBSU5fT0JKRUNUJyA6IHByb3BzLmNvbmZpZy5iaW5kZXIpO1xuICAgICAgICBjb25zdCBbZmllbGRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRXJyb3JDYWxsYmFjayA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgICBjb25zdCBbc2VjdGlvbkhhbmRsZXNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbZmllbGRQYXJlbnRFcnJvcnNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICAgICAgICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ1JlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgICAgICAgLy8gVmFsaWRpdHkgcmVnaXN0ZXI6IE1hcDxmaWVsZElkLCB7IHZhbGlkLCBtZXNzYWdlLCBmb3JjZU1hcmtlciB9Pi5cbiAgICAgICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgXCJpcyB0aGlzIGZpZWxkIHZhbGlkP1wiLiBCYXNlRmllbGQgd3JpdGVzXG4gICAgICAgIC8vIGhlcmUgZnJvbSBkb1ZhbGlkYXRpb247IGZvcm0udmFsdWUgcmVhZHMgaGVyZSB3aXRob3V0IGludm9raW5nIGFueVxuICAgICAgICAvLyBmaWVsZCBtZXRob2RzIChraWxscyB0aGUgYmktZGlyZWN0aW9uYWwgcmVuZGVyLXRpbWUgY2hhaW4gdGhhdFxuICAgICAgICAvLyBwcm9kdWNlZCBSZWFjdCAjMTg1KS5cbiAgICAgICAgY29uc3QgZmllbGRWYWxpZGl0eSA9IFJlYWN0LnVzZVJlZihuZXcgTWFwKCkpO1xuICAgICAgICBsZXQgc2VjdGlvbkNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsaWRpdHk6IChpZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRpdHkuY3VycmVudC5zZXQoaWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhckZpZWxkVmFsaWRpdHk6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGxpY2l0IFwiZm9yY2UtdmFsaWRhdGUgZXZlcnkgZmllbGRcIiBjb21tYW5kLiBSZXBsYWNlcyB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGhhY2sgb2YgcmVhZGluZyBmb3JtLnZhbHVlIHB1cmVseSBmb3IgaXRzIHNpZGUgZWZmZWN0cy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmllbGRzIHdyaXRlIGludG8gZmllbGRWYWxpZGl0eSB2aWEgZG9WYWxpZGF0aW9uIGFzIGEgc2lkZVxuICAgICAgICAgICAgICAgICAgICAvLyBlZmZlY3Qgb2YgdmFsaWRhdGU7IHdlIHRoZW4gd2FsayB0aGUgcmVnaXN0ZXIgZm9yIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGRzIHRvIGRyaXZlIFVYIChzY3JvbGxUbyBmaXJzdCwgcmVmcmVzaCBjb250YWluZXIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGJhY2spIOKAlCBzYW1lIFVYIHRoZSBnZXR0ZXIgdXNlZCB0byBwcm92aWRlLCBub3cgb3B0LWluLlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKSAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aGUgYWN0dWFsIGN1cnJlbnQgdmFsdWUgc28gZG9WYWxpZGF0aW9uJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoY3VycmVudFZhbHVlLCByZXF1aXJlZCwgbWFya2VycykgY2FjaGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdHMgcmVhbGl0eS4gV2l0aG91dCB0aGlzIHdlIHdlcmUgcGFzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bGwsIHdoaWNoIG1hZGUgY2FjaGUgaGl0cyBvcGFxdWUgaW4gbG9ncyBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZWQgVXRpbHMudmFsaWRhdGVGaWVsZCB0byBmYWxsIGJhY2sgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXNbaWRdIGV2ZXJ5IHRpbWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcGF0aC52YWx1ZU9iamVjdFtwYXRoLnZhbHVlUHJvcGVydHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHZhbHVlcy5jdXJyZW50LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdEludmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmJpbmRWYWx1ZVRvRm9ybSA9PT0gZmFsc2UpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgJiYgdi52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0SW52YWxpZCA9PT0gbnVsbCkgZmlyc3RJbnZhbGlkID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgIVV0aWxzLmlzTnVsbChmaXJzdEludmFsaWQuaGFuZGxlLmFwaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaXJzdEludmFsaWQuaGFuZGxlLmFwaS5zY3JvbGxUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQpICYmIGFwcGxpY2F0aW9uTWFuYWdlci5pc0Zvcm1NYXJrZXJzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFcnJvckNhbGxiYWNrLmN1cnJlbnQoZmllbGRQYXJlbnRFcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZERhdGEoYWN0aW9uQ29uZmlnLCBjb25maWcsIGV2ZW50ID8gZXZlbnQuZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmluZERhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvQmluZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmVudDogKGlkLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZ2V0RmllbGQoaWQpLCBpbnZhbGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBmaWVsZERhdGFCaW5kaW5ncygpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gcHJvcHMuY29uZmlnLnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gc2VjdGlvbi5jb21wb25lbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tVGFiKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gY29tcG9uZW50LmZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaCghVXRpbHMuaXNOdWxsKGZpZWxkLmRhdGFCaW5kaW5nKSA/IGZpZWxkLmRhdGFCaW5kaW5nIDogZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQgbW9kZWwobW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgcmV0dXJucyB2YWx1ZXMuY3VycmVudCBpZmYgZXZlcnkgYm91bmQgZmllbGQnc1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBlbnRyeSBpcyB2YWxpZC4gU2lkZSBlZmZlY3Q6IGludm9rZXMgZWFjaFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCdzIGNhY2hlZCBvblZhbGlkaXR5Q2hhbmdlIHRvIHJlZnJlc2ggbWFya2VyIFVJXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gcmVnaXN0ZXIgc3RhdGUg4oCUIG5vIHJlLXZhbGlkYXRpb24sIG5vIHNldEZpZWxkVmFsaWRpdHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGVzLiBTeW1tZXRyaWMgKGZpcmVzIGZvciB2YWxpZCArIGludmFsaWQpIHNvIGEgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2UgVUkgZ290IG91dCBvZiBzeW5jIHdpdGggdGhlIHJlZ2lzdGVyIChzdGFsZSBoYXNFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHNvbWUgbm9uLWRvSGFuZGxlQ2hhbmdlIHBhdGgpIGlzIHJlcGFpbnRlZCB0byBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGVzIGFyZSBpZGVtcG90ZW50IChSZWFjdCBiYWlscyBvbiBzYW1lIHZhbHVlKSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0ZWQgZm9ybS52YWx1ZSByZWFkcyBjb3N0IHplcm8gcmUtcmVuZGVycyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFpbnQuIFRoZSBtYXJrZXJzIGdhdGUgaW5zaWRlIHRoZSBjYWxsYmFjayBlbnN1cmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hlcyBvbmx5IHBhaW50IHdoZW4gZ2xvYmFsIG1hcmtlcnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZSAmJiB2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmluZFZhbHVlVG9Gb3JtID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZvcm1WYWxpZCAmJiAodiA9PT0gdW5kZWZpbmVkIHx8IHYudmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2Lm9uVmFsaWRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vblZhbGlkaXR5Q2hhbmdlKHYudmFsaWQsIHYubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dGJvdW5kLW5vcm1hbGl6ZSB0aGUgc3RvcmVkIHZhbHVlIHNvIG5vbi1zdHJpbmcgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcyAoRGF0ZSBmb3IgRGF0ZVBpY2tlciwgbG9va3VwIG9iamVjdHMsIGV0Yy4pIHNlcmlhbGl6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdpcmUgZm9ybWF0IG9uIEpTT04uc3RyaW5naWZ5LiBSZXN0b3JlcyB0aGUgYmVoYXZpb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGdldHRlciBwcm92aWRlZCB2aWEgcGFyc2VWYWx1ZShfLCBmYWxzZSkuIElkZW1wb3RlbnQgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZWQgdmFsdWVQYXJzZXJzIOKAlCByZXBlYXQgcmVhZHMgc2VlIHRoZSBhbHJlYWR5LW5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgcmUtZW1pdCB0aGUgc2FtZSBzdHJpbmcuIHBhcnNlVmFsdWUgaXMgYSBwdXJlIEpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHdpdGggbm8gUmVhY3Qgc3RhdGUgc2lkZSBlZmZlY3RzLCBzbyB1bmxpa2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY2FsbCB3ZSByZW1vdmVkIGluIHNlcT00NCwgdGhpcyBjYW4ndCBkcml2ZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyIGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQgPyB2YWx1ZXMuY3VycmVudCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkIGNvbXBsZXRlLiBFbmFibGUgbWFya2VycyBnbG9iYWxseSBzbyBhbGwgc3Vic2VxdWVudFxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmbG93cyAoc2F2ZSBjbGljaywgdmFsdWUgY2hhbmdlcywgYnV0dG9uLWRyaXZlblxuICAgICAgICAgICAgLy8gdmFsaWRhdGVBbGwpIHN1cmZhY2UgZXJyb3IgVUkuIEJhc2VGaWVsZCBzZWxmLXZhbGlkYXRpb24gZHVyaW5nXG4gICAgICAgICAgICAvLyBpbml0aWFsIGxvYWQgbG9jYWxseSBzdXBwcmVzc2VzIG1hcmtlcnMgaW4gaXRzIG93biB0cnkvZmluYWxseSxcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgcmUtZW5hYmxlIGRvZXNuJ3QgY2F1c2UgYSBsb2FkLXRpbWUgZmxhc2ggZm9yIGZpZWxkc1xuICAgICAgICAgICAgLy8gdGhhdCBtb3VudCBkdXJpbmcgdGhpcyBzYW1lIGVmZmVjdCBjeWNsZS4gQXN5bmMgZGF0YSBhcnJpdmluZ1xuICAgICAgICAgICAgLy8gbGF0ZXIgd2lsbCByZS12YWxpZGF0ZSB2aWEgQmFzZUZpZWxkJ3MgW3Byb3BzLnZhbHVlcywgY29uZmlnXVxuICAgICAgICAgICAgLy8gdXNlRWZmZWN0LCB3aGljaCBhbHNvIGxvY2FsbHkgc3VwcHJlc3NlcyBtYXJrZXJzLlxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZykgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLmNvbmZpZywgcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChtYXN0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbbWFzdGVyVmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGRzRnJvbVRhYiA9ICh0YWIpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFiUGFnZSBvZiB0YWIudGFiUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0YWJQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZm9ybVNlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNldC5maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybURhdGFPYmplY3QgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1WYWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcpIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtYXAgPSBkYXRhLm1hcDtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGZvcm1WYWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgdG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2b1t0b2tlbl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IG1hcFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9DbGVhcigpIHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0ge307XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvQmluZERhdGEoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkudmFsdWUgPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUoZGF0YVtrZXldLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWVzKGRhdGEpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGZpZWxkLmlkLCBwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUob2JqZWN0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05VTEwgZmllbGQgcmVmZXJlbmNlIHdoaWxlIHBhcnNpbmcgZm9ybSB2YWx1ZSAtICcgKyBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHBhcnNlZFZhbHVlcztcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9pZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy9wcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCwgdXBkYXRlRXJyb3JzID0gdHJ1ZSkge1xuXG4gICAgICAgICAgICBpZihmaWVsZCkge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkPy5wYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFyZW50SW52YWxpZCA9IGludmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldICE9PSBmaWVsZCAmJiBmaWVsZHNbaV0ucGFyZW50SWQgPT09IGZpZWxkLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRJbnZhbGlkID0gaXNQYXJlbnRJbnZhbGlkIHx8ICEoVXRpbHMuaXNOdWxsKGZpZWxkc1tpXS5lcnJvcikgfHwgZmllbGRzW2ldLmVycm9yLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBhcmVudEVycm9yc1tmaWVsZC5wYXJlbnRJZF0gPSBpc1BhcmVudEludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUVycm9ycyAmJiAhVXRpbHMuaXNOdWxsKGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCkgJiYgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KGZpZWxkUGFyZW50RXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZFBhcmVudEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAoZmllbGQsIGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRWYWx1ZVBhdGggPSAoaWQsIHZhbHMpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0ge307XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHZhbHM7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjdXJyZW50VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvW3Rva2Vuc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbnNbaV1dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gdm87XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb0hhbmRsZUNoYW5nZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGlkLCBudWxsKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlUHJvcGVydHkpICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkID0gdmFsaWRhdGVGaWVsZChmaWVsZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25Hcm91cCA9IGdyb3VwRmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbGlkYXRpb25Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT09IGdyb3VwRmllbGQgJiYgdmFsaWRhdGlvbkdyb3VwID09PSBmaWVsZC5oYW5kbGUuYXBpLmdldFZhbGlkYXRpb25Hcm91cCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkSWQgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncmlkRmllbGRQYXRoID0gZ2V0VmFsdWVQYXRoKGdyb3VwRmllbGRJZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZ3JpZEZpZWxkUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkVmFsID0gZ3JpZEZpZWxkUGF0aC52YWx1ZU9iamVjdFtncmlkRmllbGRQYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLVZhbGlkYXRpbmcgZm9ybScsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZChncm91cEZpZWxkLCBncm91cEZpZWxkSWQsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoaW52YWxpZCA/IG51bGwgOiB2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZXMuY3VycmVudCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRGaWVsZCA9IChpZCwgaGFuZGxlLCBwYXJlbnRJZCwgYmluZFZhbHVlVG9Gb3JtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZpZWxkLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGQgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkLmlkID0gaWQ7XG4gICAgICAgICAgICBmaWVsZC5oYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICBmaWVsZC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgZmllbGQuYmluZFZhbHVlVG9Gb3JtID0gYmluZFZhbHVlVG9Gb3JtO1xuICAgICAgICAgICAgZmllbGQucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSA9IChuYW1lLCBvcHRpb25zLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmIChVdGlscy5pc051bGwob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS5pZCA9PT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UobmFtZSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoVXRpbHMuaXNOdWxsKGZvcm0uc2VjdGlvbnMpIHx8IGZvcm0uc2VjdGlvbnMubGVuZ3RoID09PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoc2VjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uaWQgPSBzZWN0aW9uQ291bnRlciArICctZm9ybS1zZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17c2VjdGlvbkNvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiBrZXlIYW5kbGVyPXtwcm9wcy5rZXlIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtjcmVhdGVTZWN0aW9uSGFuZGxlKHNlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLmhhbmRsZS5hcGkpID8gcHJvcHMuaGFuZGxlLmFwaSA6IGFwaSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt2YWx1ZXMuY3VycmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gaWQ9e3Byb3BzLmNvbmZpZy5pZH0gc3R5bGU9e1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSA9PT0gJ2RlZmF1bHRGb3JtJyA/XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxNnB4IDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAnMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnNzB2aCdcbiAgICAgICAgICAgICAgICAgICAgfSwgcHJvcHMuY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAhVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5pZCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RVJST1I6IEEgZm9ybSBtdXN0IGhhdmUgYW4gSUQ8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj4pO1xuICAgIH0pXG47XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMs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
723
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfVXRpbHMiLCJfU2VjdGlvbiIsIl9SZXN0U2VydmljZSIsIl9PYnNlcnZhYmxlIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXIiLCJfRHluYW1pY0pTIiwiX0V2ZW50VHlwZSIsIl9FdmVudCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm93bktleXMiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJ1c2VTdHlsZXMiLCJtYWtlU3R5bGVzIiwidGhlbWUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJ3aWR0aCIsInZlcnRpY2FsQWxpZ24iLCJzZWxlY3QiLCJtYXJnaW4iLCJzcGFjaW5nIiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJzZWxlY3RFbXB0eSIsIm1hcmdpblRvcCIsInJvb3QiLCJGb3JtIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJ2YWx1ZXMiLCJ1c2VSZWYiLCJVdGlscyIsImlzTnVsbCIsIm1hc3RlclZhbHVlcyIsInNldE1hc3RlclZhbHVlcyIsInVzZVN0YXRlIiwiY29uZmlnIiwic2V0Q29uZmlnIiwicGFyc2VDb25maWciLCJ2aWV3SWQiLCJiaW5kZXIiLCJmaWVsZHMiLCJjb250YWluZXJFcnJvckNhbGxiYWNrIiwic2VjdGlvbkhhbmRsZXMiLCJmaWVsZFBhcmVudEVycm9ycyIsInZpc2libGUiLCJzZXRWaXNpYmxlIiwibG9hZGluZ1JlZiIsImZpZWxkVmFsaWRpdHkiLCJNYXAiLCJzZWN0aW9uQ291bnRlciIsImRvVmFsbGlkYXRlQWxsIiwiZmllbGQiLCJoYW5kbGUiLCJhcGkiLCJwYXRoIiwiZ2V0VmFsdWVQYXRoIiwiaWQiLCJjdXJyZW50VmFsdWUiLCJ2YWx1ZU9iamVjdCIsInZhbHVlUHJvcGVydHkiLCJ2YWxpZGF0ZSIsImN1cnJlbnQiLCJmaXJzdEludmFsaWQiLCJiaW5kVmFsdWVUb0Zvcm0iLCJ2IiwiZ2V0IiwidmFsaWQiLCJkb1ZhbGlkYXRlUGFyZW50Iiwic2Nyb2xsVG8iLCJhcHBsaWNhdGlvbk1hbmFnZXIiLCJpc0Zvcm1NYXJrZXJzRW5hYmxlZCIsImRvVXBkYXRlVmFsdWUiLCJuYW1lIiwidXBkYXRlVmFsdWUiLCJjbGVhciIsImRvQ2xlYXIiLCJzZXRWYWx1ZSIsImRvSGFuZGxlQ2hhbmdlIiwiaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSIsIm9wdGlvbnMiLCJzZWxlY3RlZElkIiwiaGFuZGxlQ2hhbmdlIiwiYWRkRmllbGQiLCJyZWYiLCJwYXJlbnRJZCIsInJlbW92ZUZpZWxkIiwic2V0RmllbGRWYWxpZGl0eSIsInJlc3VsdCIsInNldCIsImNsZWFyRmllbGRWYWxpZGl0eSIsImRlbGV0ZSIsInZhbGlkYXRlQWxsIiwibG9hZERhdGEiLCJhY3Rpb25Db25maWciLCJldmVudCIsImRhdGEiLCJiaW5kRGF0YSIsImRvQmluZERhdGEiLCJ2YWxpZGF0ZVBhcmVudCIsImludmFsaWQiLCJnZXRGaWVsZCIsImZpZWxkRGF0YUJpbmRpbmdzIiwiZmllbGROYW1lcyIsInNlY3Rpb25zIiwic2VjdGlvbiIsImoiLCJjb21wb25lbnRzIiwiY29tcG9uZW50IiwidHlwZSIsImdldEZpZWxkc0Zyb21UYWIiLCJrIiwiZGF0YUJpbmRpbmciLCJzZXRDb250YWluZXJFcnJvckhhbmRsZXIiLCJjYWxsYmFjayIsIm1vZGVsIiwicGFyc2VWYWx1ZXMiLCJ0cmFuc2Zvcm1EYXRhT2JqZWN0IiwiZm9ybVZhbGlkIiwidW5kZWZpbmVkIiwib25WYWxpZGl0eUNoYW5nZSIsIm1lc3NhZ2UiLCJwYXJzZVZhbHVlIiwic2V0RmllbGRFcnJvciIsImVycm9yIiwiZ2V0Q2hpbGRyZW4iLCJjaGlsZHJlbiIsIm1vcmVDaGlsZHJlbiIsInByb3BlcnRpZXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcGVydHkiLCJzZWN0aW9uSGFuZGxlIiwiY2hpbGQiLCJyZWZyZXNoIiwicGFyc2VkQ29uZmlnIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsImNyZWF0ZVNlY3Rpb25IYW5kbGUiLCJ1cGRhdGVWaWV3VGl0bGUiLCJ2aWV3IiwiZ2V0VmlldyIsInRpdGxlIiwiaW5jbHVkZXMiLCJ1cGRhdGVBcHBCYXJUaXRsZSIsImhhbmRsZURhdGFBcnJpdmVkIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJEQVRBX0FSUklWRUQiLCJwcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyIsImV2ZW50Q29uZmlnIiwiY29tcG9uZW50Q29uZmlnIiwiZXZlbnREYXRhIiwic2VydmljZSIsImRhdGFTZXJ2aWNlIiwiY29tcG9uZW50VmFsdWUiLCJyZXNvbHZlUGFyYW1ldGVyQ29uZmlnVmFsdWUiLCJpbnZva2VScGMiLCJ0aGVuIiwiY29uc29sZSIsImNhdGNoIiwiZXJyb3JUeXBlIiwicHVibGlzaEVycm9yTWVzc2FnZSIsInNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciIsImV4ZWN1dGUiLCJwYXJhbWV0ZXIiLCJpc0V4cHJlc3Npb24iLCJmaWxsRXZlbnREYXRhVmFsdWUiLCJpc0V2ZW50RGF0YSIsInRvU3RyaW5nIiwic3RhcnRzV2l0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwiYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uIiwiZHluYW1pY0pTIiwiZXhlY3V0ZVNjcmlwdCIsImNvbmNhdCIsInZhbCIsIm1hcCIsInJlc29sdmVFeHByZXNzaW9uVmFsdWUiLCJ1c2VFZmZlY3QiLCJldmVudEhhbmRsaW5nQ29uZmlnIiwic3Vic2NyaXB0aW9ucyIsImF1dG9Mb2FkRGF0YSIsImdldENvbXBvbmVudEF0dHJpYnV0ZSIsInN1YnNjcmlwdGlvbiIsImV2ZW50VHlwZSIsIkNPTVBPTkVOVF9MT0FEIiwiYWN0aW9ucyIsImFjdGlvblR5cGUiLCJhZGRTdWJzY3JpcHRpb25zIiwiYWRkU3lzdGVtU3Vic2NyaXB0aW9ucyIsImhhbmRsZUxvYWRDb21wbGV0ZSIsImVuYWJsZUZvcm1NYXJrZXJzIiwiY2xlYXJDb21wb25lbnRFdmVudExpc3RlbmVycyIsInRhYiIsInRhYlBhZ2UiLCJ0YWJQYWdlcyIsImZpZWxkc2V0IiwiZm9ybVZhbHVlcyIsInRva2VucyIsInNwbGl0Iiwidm8iLCJ0b2tlbiIsInZhbHVlQ2hhbmdlSGFuZGxlciIsIm1vZGVsQ2hhbmdlSGFuZGxlciIsImtleSIsInBhcnNlZFZhbHVlcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsIm9iamVjdFZhbHVlIiwiZGF0YUFycml2ZWRIYW5kbGVyIiwic3BsaWNlIiwidXBkYXRlRXJyb3JzIiwiaXNQYXJlbnRJbnZhbGlkIiwidmFsaWRhdGVGaWVsZCIsInZhbHMiLCJjdXJyZW50VmFsdWVzIiwiZ3JvdXBGaWVsZCIsInZhbGlkYXRpb25Hcm91cCIsImdldFZhbGlkYXRpb25Hcm91cCIsImdyb3VwRmllbGRJZCIsImdyaWRGaWVsZFBhdGgiLCJncm91cEZpZWxkVmFsIiwibG9nIiwiVkFMVUVfQ0hBTkdFIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsInJlbmRlciIsImZvcm0iLCJjcmVhdGVFbGVtZW50Iiwia2V5SGFuZGxlciIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtZXJnZVN0eWxlcyIsInBhZGRpbmciLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL0Zvcm0uanN4Il0sInNvdXJjZXNDb250ZW50IjpbIu+7v2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge21ha2VTdHlsZXN9IGZyb20gJ0BtdWkvc3R5bGVzJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5pbXBvcnQgU2VjdGlvbiBmcm9tICcuL1NlY3Rpb24nO1xuaW1wb3J0ICcuL0Zvcm0uY3NzJztcbmltcG9ydCB7aW52b2tlUnBjfSBmcm9tICcuLi8uLi9SZXN0U2VydmljZSc7XG5pbXBvcnQgZXZlbnRNYW5hZ2VyIGZyb20gJy4uLy4uL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IGFwcGxpY2F0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IHNlcnZpY2VDYWxsQWN0aW9uSGFuZGxlciBmcm9tICcuLi8uLi9ldmVudC9TZXJ2aWNlQ2FsbEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IGR5bmFtaWNKUyBmcm9tICcuLi8uLi9EeW5hbWljSlMnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuLi8uLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50JztcblxuY29uc3QgdXNlU3R5bGVzID0gbWFrZVN0eWxlcyh0aGVtZSA9PiAoe1xuICAgIGNvbnRhaW5lcjoge1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICcmIHRyIHRkJzoge1xuICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCdcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0OiB7XG4gICAgICAgIG1hcmdpbjogdGhlbWUuc3BhY2luZygxKSxcbiAgICAgICAgbWluV2lkdGg6IDEyMCxcbiAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgIH0sXG4gICAgc2VsZWN0RW1wdHk6IHtcbiAgICAgICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgIH0sXG4gICAgcm9vdDoge31cbn0pKTtcblxuY29uc3QgRm9ybSA9IFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFJlYWN0LnVzZVJlZighVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykgPyBwcm9wcy52YWx1ZXMgOiB7fSk7XG4gICAgICAgIGNvbnN0IFttYXN0ZXJWYWx1ZXMsIHNldE1hc3RlclZhbHVlc10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICAgICAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IFJlYWN0LnVzZVN0YXRlKFV0aWxzLnBhcnNlQ29uZmlnKHByb3BzLmNvbmZpZywgcHJvcHMudmlld0lkKSk7XG4gICAgICAgIGNvbnN0IFtiaW5kZXJdID0gUmVhY3QudXNlU3RhdGUoVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZy5iaW5kZXIpID8gJ1BMQUlOX09CSkVDVCcgOiBwcm9wcy5jb25maWcuYmluZGVyKTtcbiAgICAgICAgY29uc3QgW2ZpZWxkc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVycm9yQ2FsbGJhY2sgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgICAgY29uc3QgW3NlY3Rpb25IYW5kbGVzXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICAgICAgY29uc3QgW2ZpZWxkUGFyZW50RXJyb3JzXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICAgICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gUmVhY3QudXNlU3RhdGUodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdSZWYgPSBSZWFjdC51c2VSZWYodHJ1ZSk7XG4gICAgICAgIC8vIFZhbGlkaXR5IHJlZ2lzdGVyOiBNYXA8ZmllbGRJZCwgeyB2YWxpZCwgbWVzc2FnZSwgZm9yY2VNYXJrZXIgfT4uXG4gICAgICAgIC8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwiaXMgdGhpcyBmaWVsZCB2YWxpZD9cIi4gQmFzZUZpZWxkIHdyaXRlc1xuICAgICAgICAvLyBoZXJlIGZyb20gZG9WYWxpZGF0aW9uOyBmb3JtLnZhbHVlIHJlYWRzIGhlcmUgd2l0aG91dCBpbnZva2luZyBhbnlcbiAgICAgICAgLy8gZmllbGQgbWV0aG9kcyAoa2lsbHMgdGhlIGJpLWRpcmVjdGlvbmFsIHJlbmRlci10aW1lIGNoYWluIHRoYXRcbiAgICAgICAgLy8gcHJvZHVjZWQgUmVhY3QgIzE4NSkuXG4gICAgICAgIGNvbnN0IGZpZWxkVmFsaWRpdHkgPSBSZWFjdC51c2VSZWYobmV3IE1hcCgpKTtcbiAgICAgICAgbGV0IHNlY3Rpb25Db3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGRvVmFsbGlkYXRlQWxsKCkge1xuICAgICAgICAvLyBFeHBsaWNpdCBcImZvcmNlLXZhbGlkYXRlIGV2ZXJ5IGZpZWxkXCIgY29tbWFuZC4gUmVwbGFjZXMgdGhlXG4gICAgICAgIC8vIG9sZCBoYWNrIG9mIHJlYWRpbmcgZm9ybS52YWx1ZSBwdXJlbHkgZm9yIGl0cyBzaWRlIGVmZmVjdHMuXG4gICAgICAgIC8vIEZpZWxkcyB3cml0ZSBpbnRvIGZpZWxkVmFsaWRpdHkgdmlhIGRvVmFsaWRhdGlvbiBhcyBhIHNpZGVcbiAgICAgICAgLy8gZWZmZWN0IG9mIHZhbGlkYXRlOyB3ZSB0aGVuIHdhbGsgdGhlIHJlZ2lzdGVyIGZvciBpbnZhbGlkXG4gICAgICAgIC8vIGZpZWxkcyB0byBkcml2ZSBVWCAoc2Nyb2xsVG8gZmlyc3QsIHJlZnJlc2ggY29udGFpbmVyIGVycm9yXG4gICAgICAgIC8vIGNhbGxiYWNrKSDigJQgc2FtZSBVWCB0aGUgZ2V0dGVyIHVzZWQgdG8gcHJvdmlkZSwgbm93IG9wdC1pbi5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZSkgJiYgIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgIC8vIFBhc3MgdGhlIGFjdHVhbCBjdXJyZW50IHZhbHVlIHNvIGRvVmFsaWRhdGlvbidzXG4gICAgICAgICAgICAgICAgLy8gKGN1cnJlbnRWYWx1ZSwgcmVxdWlyZWQsIG1hcmtlcnMpIGNhY2hlIGtleVxuICAgICAgICAgICAgICAgIC8vIHJlZmxlY3RzIHJlYWxpdHkuIFdpdGhvdXQgdGhpcyB3ZSB3ZXJlIHBhc3NpbmdcbiAgICAgICAgICAgICAgICAvLyBudWxsLCB3aGljaCBtYWRlIGNhY2hlIGhpdHMgb3BhcXVlIGluIGxvZ3MgYW5kXG4gICAgICAgICAgICAgICAgLy8gZm9yY2VkIFV0aWxzLnZhbGlkYXRlRmllbGQgdG8gZmFsbCBiYWNrIHRvXG4gICAgICAgICAgICAgICAgLy8gdmFsdWVzW2lkXSBldmVyeSB0aW1lLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBnZXRWYWx1ZVBhdGgoZmllbGQuaWQsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9ICFVdGlscy5pc051bGwocGF0aCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICA/IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgZmllbGQuaGFuZGxlLmFwaS52YWxpZGF0ZSh2YWx1ZXMuY3VycmVudCwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlyc3RJbnZhbGlkID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5iaW5kVmFsdWVUb0Zvcm0gPT09IGZhbHNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZ2V0KGZpZWxkLmlkKTtcbiAgICAgICAgICAgIGlmICh2ICYmIHYudmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdEludmFsaWQgPT09IG51bGwpIGZpcnN0SW52YWxpZCA9IGZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpcnN0SW52YWxpZClcbiAgICAgICAgICAgICYmICFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkLmhhbmRsZSlcbiAgICAgICAgICAgICYmICFVdGlscy5pc051bGwoZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAmJiB0eXBlb2YgZmlyc3RJbnZhbGlkLmhhbmRsZS5hcGkuc2Nyb2xsVG8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGZpcnN0SW52YWxpZC5oYW5kbGUuYXBpLnNjcm9sbFRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KSAmJiBhcHBsaWNhdGlvbk1hbmFnZXIuaXNGb3JtTWFya2Vyc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KGZpZWxkUGFyZW50RXJyb3JzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwaSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZ2V0IGlkKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuY29uZmlnLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9VcGRhdGVWYWx1ZTogKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb0hhbmRsZUNoYW5nZShpZCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZTogKG5hbWUsIG9wdGlvbnMsIHNlbGVjdGVkSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNlbGVjdEl0ZW1DaGFuZ2UobmFtZSwgb3B0aW9ucywgc2VsZWN0ZWRJZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2U6IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UoaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldFZhbHVlUGF0aDogKGlkLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlUGF0aChpZCwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkRmllbGQoaWQsIHJlZiwgcGFyZW50SWQsIGJpbmRWYWx1ZVRvRm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVGaWVsZDogKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsaWRpdHk6IChpZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRpdHkuY3VycmVudC5zZXQoaWQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGVhckZpZWxkVmFsaWRpdHk6IChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbGlkaXR5LmN1cnJlbnQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlQWxsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsbGlkYXRlQWxsKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRGF0YTogKGFjdGlvbkNvbmZpZywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZERhdGEoYWN0aW9uQ29uZmlnLCBjb25maWcsIGV2ZW50ID8gZXZlbnQuZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmluZERhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvQmluZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZVBhcmVudDogKGlkLCBpbnZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvVmFsaWRhdGVQYXJlbnQoZ2V0RmllbGQoaWQpLCBpbnZhbGlkKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldCBmaWVsZERhdGFCaW5kaW5ncygpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5jb25maWcuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uID0gcHJvcHMuY29uZmlnLnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLmNvbXBvbmVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gc2VjdGlvbi5jb21wb25lbnRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgPSBnZXRGaWVsZHNGcm9tVGFiKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gY29tcG9uZW50LmZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGZpZWxkcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBmaWVsZHNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHVzaCghVXRpbHMuaXNOdWxsKGZpZWxkLmRhdGFCaW5kaW5nKSA/IGZpZWxkLmRhdGFCaW5kaW5nIDogZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZE5hbWVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0Q29udGFpbmVyRXJyb3JIYW5kbGVyKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQgbW9kZWwobW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChtb2RlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KG1vZGVsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXN0ZXJWYWx1ZXMobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWQgcmV0dXJucyB2YWx1ZXMuY3VycmVudCBpZmYgZXZlcnkgYm91bmQgZmllbGQnc1xuICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciBlbnRyeSBpcyB2YWxpZC4gU2lkZSBlZmZlY3Q6IGludm9rZXMgZWFjaFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWVsZCdzIGNhY2hlZCBvblZhbGlkaXR5Q2hhbmdlIHRvIHJlZnJlc2ggbWFya2VyIFVJXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gcmVnaXN0ZXIgc3RhdGUg4oCUIG5vIHJlLXZhbGlkYXRpb24sIG5vIHNldEZpZWxkVmFsaWRpdHlcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGVzLiBTeW1tZXRyaWMgKGZpcmVzIGZvciB2YWxpZCArIGludmFsaWQpIHNvIGEgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2UgVUkgZ290IG91dCBvZiBzeW5jIHdpdGggdGhlIHJlZ2lzdGVyIChzdGFsZSBoYXNFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIHNvbWUgbm9uLWRvSGFuZGxlQ2hhbmdlIHBhdGgpIGlzIHJlcGFpbnRlZCB0byBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0U3RhdGVzIGFyZSBpZGVtcG90ZW50IChSZWFjdCBiYWlscyBvbiBzYW1lIHZhbHVlKSwgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0ZWQgZm9ybS52YWx1ZSByZWFkcyBjb3N0IHplcm8gcmUtcmVuZGVycyBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFpbnQuIFRoZSBtYXJrZXJzIGdhdGUgaW5zaWRlIHRoZSBjYWxsYmFjayBlbnN1cmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hlcyBvbmx5IHBhaW50IHdoZW4gZ2xvYmFsIG1hcmtlcnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgIGRvVmFsbGlkYXRlQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1JlZi5jdXJyZW50ID09PSBmYWxzZSAmJiB2YWx1ZXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuYmluZFZhbHVlVG9Gb3JtID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGZpZWxkVmFsaWRpdHkuY3VycmVudC5nZXQoZmllbGQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1WYWxpZCA9IGZvcm1WYWxpZCAmJiAodiA9PT0gdW5kZWZpbmVkIHx8IHYudmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2Lm9uVmFsaWRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vblZhbGlkaXR5Q2hhbmdlKHYudmFsaWQsIHYubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dGJvdW5kLW5vcm1hbGl6ZSB0aGUgc3RvcmVkIHZhbHVlIHNvIG5vbi1zdHJpbmcgZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0eXBlcyAoRGF0ZSBmb3IgRGF0ZVBpY2tlciwgbG9va3VwIG9iamVjdHMsIGV0Yy4pIHNlcmlhbGl6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHdpcmUgZm9ybWF0IG9uIEpTT04uc3RyaW5naWZ5LiBSZXN0b3JlcyB0aGUgYmVoYXZpb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGdldHRlciBwcm92aWRlZCB2aWEgcGFyc2VWYWx1ZShfLCBmYWxzZSkuIElkZW1wb3RlbnQgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHlwZWQgdmFsdWVQYXJzZXJzIOKAlCByZXBlYXQgcmVhZHMgc2VlIHRoZSBhbHJlYWR5LW5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBhbmQgcmUtZW1pdCB0aGUgc2FtZSBzdHJpbmcuIHBhcnNlVmFsdWUgaXMgYSBwdXJlIEpTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIHdpdGggbm8gUmVhY3Qgc3RhdGUgc2lkZSBlZmZlY3RzLCBzbyB1bmxpa2UgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY2FsbCB3ZSByZW1vdmVkIGluIHNlcT00NCwgdGhpcyBjYW4ndCBkcml2ZSBhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyIGxvb3AuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQuaGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuaXNOdWxsKGZpZWxkLmhhbmRsZS5hcGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGdldFZhbHVlUGF0aChmaWVsZC5pZCwgdmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoKSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkucGFyc2VWYWx1ZShwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsaWQgPyB2YWx1ZXMuY3VycmVudCA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRGaWVsZEVycm9yOiAoaWQsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaWVsZEVycm9yKGlkLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRDaGlsZHJlbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goZmllbGQuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3JlQ2hpbGRyZW4gPSBmaWVsZC5oYW5kbGUuYXBpLmdldENoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vcmVDaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobW9yZUNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc2VjdGlvbkhhbmRsZXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWN0aW9uSGFuZGxlID0gc2VjdGlvbkhhbmRsZXNbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChzZWN0aW9uSGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc2VjdGlvbkhhbmRsZS5hcGkuZ2V0Q2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzZWN0aW9uSGFuZGxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlY3Rpb25IYW5kbGUgPSBzZWN0aW9uSGFuZGxlc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbkhhbmRsZS5hcGkucmVmcmVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25IYW5kbGUuYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWRDb25maWcgPSBVdGlscy5wYXJzZUNvbmZpZyhwcm9wcy5jb25maWcsIHByb3BzLnZpZXdJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcnNlZENvbmZpZy52aXNpYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcnNlZENvbmZpZy52aXNpYmxlLCBwYXJzZWRDb25maWcuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3JlYXRlU2VjdGlvbkhhbmRsZSA9IChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3Rpb25IYW5kbGVzW3NlY3Rpb24uaWRdKSkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSB7fTtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSGFuZGxlc1tzZWN0aW9uLmlkXSA9IGhhbmRsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VjdGlvbkhhbmRsZXNbc2VjdGlvbi5pZF07XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmlld1RpdGxlKCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLnZpZXdJZCkge1xuICAgICAgICAgICAgICAgIGxldCB2aWV3ID0gYXBwbGljYXRpb25NYW5hZ2VyLmdldFZpZXcocHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSB2aWV3LmNvbmZpZy50aXRsZTtcblxuICAgICAgICAgICAgICAgICAgICBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHByb3BzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIudXBkYXRlQXBwQmFyVGl0bGUodmlldy5jb25maWcuaWQsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZURhdGFBcnJpdmVkKGRhdGEpIHtcbiAgICAgICAgICAgIHVwZGF0ZVZpZXdUaXRsZSgpO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChwcm9wcy5oYW5kbGUsIHByb3BzLnZpZXdJZCwgZGF0YSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuREFUQV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5wcm9jZXNzU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9ucyhwcm9wcy5jb25maWcuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMoZmllbGQuaGFuZGxlLmFwaS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBsb2FkRGF0YShldmVudENvbmZpZywgY29tcG9uZW50Q29uZmlnLCBldmVudERhdGEgPSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmljZSA9ICFVdGlscy5pc051bGwoY29tcG9uZW50Q29uZmlnLmRhdGFTZXJ2aWNlKSA/IGNvbXBvbmVudENvbmZpZy5kYXRhU2VydmljZSA6XG4gICAgICAgICAgICAgICAgZXZlbnRDb25maWcgIT09IG51bGwgPyBldmVudENvbmZpZy5kYXRhU2VydmljZSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VmFsdWUgPSAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudENvbmZpZy52YWx1ZSkgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGNvbXBvbmVudENvbmZpZy52YWx1ZSwgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChldmVudENvbmZpZykgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZVBhcmFtZXRlckNvbmZpZ1ZhbHVlKGV2ZW50Q29uZmlnLnZhbHVlLCBldmVudERhdGEpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZSkpIHtcbiAgICAgICAgICAgICAgICBkb0NsZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UudHlwZSA9PT0gJ3JwYycpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlUnBjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHByb3BzLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZDogcHJvcHMudmlld0lkXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVmFsdWVzKHRyYW5zZm9ybURhdGFPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLmVycm9yVHlwZSA9PT0gJ0lOVkFMSURfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnB1Ymxpc2hFcnJvck1lc3NhZ2UoZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGV2ZW50Q29uZmlnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRDb25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q29uZmlnLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIDogSW1wbGVtZW50IHRoZSBpbnZhbGlkIHBhcmFtZW50ZXIgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUNhbGxBY3Rpb25IYW5kbGVyLmV4ZWN1dGUoZXZlbnRDb25maWcsIG51bGwsIG51bGwsIHByb3BzLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdChkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChwYXJhbWV0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VmFsdWUgPSBhcHBsaWNhdGlvbk1hbmFnZXIuZmlsbEV2ZW50RGF0YVZhbHVlKGNvbXBvbmVudFZhbHVlLCBldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRXZlbnREYXRhID0gY29tcG9uZW50VmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0c1dpdGgoJyRldmVudC5kYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbk1hbmFnZXIuaXNFeHByZXNzaW9uKGNvbXBvbmVudFZhbHVlKSAmJiAhaXNFdmVudERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgoY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuYWRkU3lzdGVtR2VuZXJhdGVkU3Vic2NyaXB0aW9uKHByb3BzLnZpZXdJZCwgcHJvcHMudmlld0lkLCBwcm9wcy5jb25maWcuaWQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY0pTLmV4ZWN1dGVTY3JpcHQoYCR7cHJvcHMuY29uZmlnLmlkfVZhbHVlRXZhbHVhdG9yYCwgY29tcG9uZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaW5kZXIgPT09ICdNQVBfT0JKRUNUJyAmJiBVdGlscy5pc051bGwodmFsdWUubWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5tYXAgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModHJhbnNmb3JtRGF0YU9iamVjdCh2YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hc3RlclZhbHVlcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gaXNFdmVudERhdGEgPyBhcHBsaWNhdGlvbk1hbmFnZXIucmVzb2x2ZUV4cHJlc3Npb25WYWx1ZShjb21wb25lbnRWYWx1ZSwgZXZlbnREYXRhKSA6IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpbmRlciA9PT0gJ01BUF9PQkpFQ1QnICYmIFV0aWxzLmlzTnVsbChjb21wb25lbnRWYWx1ZS5tYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLm1hcCA9IGNvbXBvbmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyh0cmFuc2Zvcm1EYXRhT2JqZWN0KHZhbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWFzdGVyVmFsdWVzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWaWV3VGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wcy5oYW5kbGUuYXBpID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvcHMuaGFuZGxlLmFwaSA9IGFwaSgpO1xuICAgICAgICAgICAgbGV0IGV2ZW50SGFuZGxpbmdDb25maWcgPSBVdGlscy5pc051bGwoY29uZmlnLmV2ZW50SGFuZGxpbmdDb25maWcpID8ge30gOiBjb25maWcuZXZlbnRIYW5kbGluZ0NvbmZpZztcbiAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucyA9IFV0aWxzLmlzTnVsbChldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnMpID8gW10gOiBldmVudEhhbmRsaW5nQ29uZmlnLnN1YnNjcmlwdGlvbnM7XG5cbiAgICAgICAgICAgIGxldCBhdXRvTG9hZERhdGEgPSBVdGlscy5nZXRDb21wb25lbnRBdHRyaWJ1dGUoY29uZmlnLCAnYXV0b0xvYWREYXRhJywgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYXV0b0xvYWREYXRhID09PSBudWxsIHx8IGF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlLkNPTVBPTkVOVF9MT0FELFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogJ2xvYWREYXRhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxpbmdDb25maWcuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZURhdGFBcnJpdmVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTdWJzY3JpcHRpb25zKGV2ZW50SGFuZGxpbmdDb25maWcsIHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5hZGRTeXN0ZW1TdWJzY3JpcHRpb25zKHByb3BzLnZpZXdJZCwgY29uZmlnKTtcbiAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGUgPSBmaWVsZC5oYW5kbGU7XG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGFuZGxlKSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBpLmhhbmRsZUxvYWRDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQocHJvcHMuaGFuZGxlLCBwcm9wcy52aWV3SWQsIG51bGwpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuQ09NUE9ORU5UX0xPQUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkIGNvbXBsZXRlLiBFbmFibGUgbWFya2VycyBnbG9iYWxseSBzbyBhbGwgc3Vic2VxdWVudFxuICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmbG93cyAoc2F2ZSBjbGljaywgdmFsdWUgY2hhbmdlcywgYnV0dG9uLWRyaXZlblxuICAgICAgICAgICAgLy8gdmFsaWRhdGVBbGwpIHN1cmZhY2UgZXJyb3IgVUkuIEJhc2VGaWVsZCBzZWxmLXZhbGlkYXRpb24gZHVyaW5nXG4gICAgICAgICAgICAvLyBpbml0aWFsIGxvYWQgbG9jYWxseSBzdXBwcmVzc2VzIG1hcmtlcnMgaW4gaXRzIG93biB0cnkvZmluYWxseSxcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgcmUtZW5hYmxlIGRvZXNuJ3QgY2F1c2UgYSBsb2FkLXRpbWUgZmxhc2ggZm9yIGZpZWxkc1xuICAgICAgICAgICAgLy8gdGhhdCBtb3VudCBkdXJpbmcgdGhpcyBzYW1lIGVmZmVjdCBjeWNsZS4gQXN5bmMgZGF0YSBhcnJpdmluZ1xuICAgICAgICAgICAgLy8gbGF0ZXIgd2lsbCByZS12YWxpZGF0ZSB2aWEgQmFzZUZpZWxkJ3MgW3Byb3BzLnZhbHVlcywgY29uZmlnXVxuICAgICAgICAgICAgLy8gdXNlRWZmZWN0LCB3aGljaCBhbHNvIGxvY2FsbHkgc3VwcHJlc3NlcyBtYXJrZXJzLlxuICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmVuYWJsZUZvcm1NYXJrZXJzKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5jbGVhckNvbXBvbmVudEV2ZW50TGlzdGVuZXJzKHByb3BzLmhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmNvbmZpZykgJiYgIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXMocHJvcHMudmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW3Byb3BzLmNvbmZpZywgcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKG1hc3RlclZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhQXJyaXZlZChtYXN0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbbWFzdGVyVmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGRzRnJvbVRhYiA9ICh0YWIpID0+IHtcbiAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGFiUGFnZSBvZiB0YWIudGFiUGFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0YWJQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlID09PSAnZm9ybVNlY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGNvbXBvbmVudC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGRzLmNvbmNhdChmaWVsZHNldC5maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybURhdGFPYmplY3QgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1WYWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoYmluZGVyID09PSAnTUFQX09CSkVDVCcpIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBtYXAgPSBkYXRhLm1hcDtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChtYXApKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG9rZW5zID0gcHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2byA9IGZvcm1WYWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgdG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh2b1t0b2tlbl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbl0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvID0gdm9bdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvW3Rva2VuXSA9IG1hcFtwcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9DbGVhcigpIHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5oYW5kbGUuYXBpLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbHVlcy5jdXJyZW50ID0ge307XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2Vycyh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvQmluZERhdGEoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmhhbmRsZS5hcGkudmFsdWUgPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUoZGF0YVtrZXldLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVmFsdWVzKGRhdGEpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGZpZWxkLmlkLCBwYXJzZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHBhdGgudmFsdWVPYmplY3RbcGF0aC52YWx1ZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZC5oYW5kbGUuYXBpKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSBmaWVsZC5oYW5kbGUuYXBpLnBhcnNlVmFsdWUob2JqZWN0VmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05VTEwgZmllbGQgcmVmZXJlbmNlIHdoaWxlIHBhcnNpbmcgZm9ybSB2YWx1ZSAtICcgKyBmaWVsZC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZXMuY3VycmVudCA9IHBhcnNlZFZhbHVlcztcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLmRhdGFBcnJpdmVkSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5kYXRhQXJyaXZlZEhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9pZiAoIVV0aWxzLmlzTnVsbChwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgLy9wcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIocGFyc2VkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vfVxuICAgICAgICB9XG5cbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHByb3BzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZVZhbHVlcyhwcm9wcy52YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbcHJvcHMudmFsdWVzXSk7XG5cbiAgICAgICAgY29uc3QgZ2V0RmllbGQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUZpZWxkID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRWYWxpZGl0eS5jdXJyZW50LmRlbGV0ZShpZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gZG9WYWxpZGF0ZVBhcmVudChmaWVsZCwgaW52YWxpZCwgdXBkYXRlRXJyb3JzID0gdHJ1ZSkge1xuXG4gICAgICAgICAgICBpZihmaWVsZCkge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkPy5wYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFyZW50SW52YWxpZCA9IGludmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldICE9PSBmaWVsZCAmJiBmaWVsZHNbaV0ucGFyZW50SWQgPT09IGZpZWxkLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRJbnZhbGlkID0gaXNQYXJlbnRJbnZhbGlkIHx8ICEoVXRpbHMuaXNOdWxsKGZpZWxkc1tpXS5lcnJvcikgfHwgZmllbGRzW2ldLmVycm9yLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBhcmVudEVycm9yc1tmaWVsZC5wYXJlbnRJZF0gPSBpc1BhcmVudEludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUVycm9ycyAmJiAhVXRpbHMuaXNOdWxsKGNvbnRhaW5lckVycm9yQ2FsbGJhY2suY3VycmVudCkgJiYgYXBwbGljYXRpb25NYW5hZ2VyLmlzRm9ybU1hcmtlcnNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRXJyb3JDYWxsYmFjay5jdXJyZW50KGZpZWxkUGFyZW50RXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWVsZFBhcmVudEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSAoZmllbGQsIGlkLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5lcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGludmFsaWQgPSBmaWVsZC5oYW5kbGUuYXBpLnZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtpZF06IHZhbHVlXG4gICAgICAgICAgICAgICAgfSwgdmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb1ZhbGlkYXRlUGFyZW50KGZpZWxkLCBpbnZhbGlkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBnZXRWYWx1ZVBhdGggPSAoaWQsIHZhbHMpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0ge307XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlcyA9IHZhbHM7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHZhbHMpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlcyA9IHZhbHVlcy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChjdXJyZW50VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGxldCB0b2tlbnMgPSBpZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3QgPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdm8gPSBjdXJyZW50VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZvW3Rva2Vuc1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b1t0b2tlbnNbaV1dID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm8gPSB2b1t0b2tlbnNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodm8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0ID0gdm87XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnZhbHVlUHJvcGVydHkgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkb0hhbmRsZUNoYW5nZSA9IChpZCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0VmFsdWVQYXRoKGlkLCBudWxsKTtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlUHJvcGVydHkpICYmIGxvYWRpbmdSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnZhbHVlT2JqZWN0W3BhdGgudmFsdWVQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGdldEZpZWxkKGlkKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGZpZWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkID0gdmFsaWRhdGVGaWVsZChmaWVsZCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRpb25Hcm91cCA9IGdyb3VwRmllbGQuaGFuZGxlLmFwaS5nZXRWYWxpZGF0aW9uR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbGlkYXRpb25Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQgIT09IGdyb3VwRmllbGQgJiYgdmFsaWRhdGlvbkdyb3VwID09PSBmaWVsZC5oYW5kbGUuYXBpLmdldFZhbGlkYXRpb25Hcm91cCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkSWQgPSBncm91cEZpZWxkLmhhbmRsZS5hcGkuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncmlkRmllbGRQYXRoID0gZ2V0VmFsdWVQYXRoKGdyb3VwRmllbGRJZCwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZ3JpZEZpZWxkUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBncm91cEZpZWxkVmFsID0gZ3JpZEZpZWxkUGF0aC52YWx1ZU9iamVjdFtncmlkRmllbGRQYXRoLnZhbHVlUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JFLVZhbGlkYXRpbmcgZm9ybScsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGaWVsZChncm91cEZpZWxkLCBncm91cEZpZWxkSWQsIGdyb3VwRmllbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy52YWx1ZUNoYW5nZUhhbmRsZXIoaW52YWxpZCA/IG51bGwgOiB2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwcm9wcy5tb2RlbENoYW5nZUhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm1vZGVsQ2hhbmdlSGFuZGxlcih2YWx1ZXMuY3VycmVudCwgaWQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5lbmFibGVGb3JtTWFya2VycyhmYWxzZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIucHJvY2Vzc1N5c3RlbUdlbmVyYXRlZFN1YnNjcmlwdGlvbnMocHJvcHMuY29uZmlnLmlkKTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KHByb3BzLmhhbmRsZSwgcHJvcHMudmlld0lkLCB2YWx1ZXMuY3VycmVudCk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5WQUxVRV9DSEFOR0UsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gKGlkLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gZ2V0RmllbGQoaWQpO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhZGRGaWVsZCA9IChpZCwgaGFuZGxlLCBwYXJlbnRJZCwgYmluZFZhbHVlVG9Gb3JtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBnZXRGaWVsZChpZCk7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZpZWxkLmVycm9yO1xuICAgICAgICAgICAgICAgIHJlbW92ZUZpZWxkKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGQgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkLmlkID0gaWQ7XG4gICAgICAgICAgICBmaWVsZC5oYW5kbGUgPSBoYW5kbGU7XG4gICAgICAgICAgICBmaWVsZC5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgZmllbGQuYmluZFZhbHVlVG9Gb3JtID0gYmluZFZhbHVlVG9Gb3JtO1xuICAgICAgICAgICAgZmllbGQucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VWYWx1ZXModmFsdWVzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0SXRlbUNoYW5nZSA9IChuYW1lLCBvcHRpb25zLCBzZWxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmIChVdGlscy5pc051bGwob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS5pZCA9PT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgPSBvcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9IYW5kbGVDaGFuZ2UobmFtZSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHMudmFsdWVDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAuLi52YWx1ZXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMubW9kZWxDaGFuZ2VIYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udmFsdWVzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZW5kZXIoZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoVXRpbHMuaXNOdWxsKGZvcm0uc2VjdGlvbnMpIHx8IGZvcm0uc2VjdGlvbnMubGVuZ3RoID09PSAwKSA/XG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uc2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoc2VjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uaWQgPSBzZWN0aW9uQ291bnRlciArICctZm9ybS1zZWN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGtleT17c2VjdGlvbkNvdW50ZXIrK30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiBrZXlIYW5kbGVyPXtwcm9wcy5rZXlIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlPXtjcmVhdGVTZWN0aW9uSGFuZGxlKHNlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhVXRpbHMuaXNOdWxsKHByb3BzLmhhbmRsZS5hcGkpID8gcHJvcHMuaGFuZGxlLmFwaSA6IGFwaSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdJZD17cHJvcHMudmlld0lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt2YWx1ZXMuY3VycmVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmlzaWJsZSAmJlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gaWQ9e3Byb3BzLmNvbmZpZy5pZH0gc3R5bGU9e1xuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSA9PT0gJ2RlZmF1bHRGb3JtJyA/XG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLm1lcmdlU3R5bGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogJzcwdmgnXG4gICAgICAgICAgICAgICAgICAgIH0sIHByb3BzLmNvbmZpZylcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgIVV0aWxzLmlzTnVsbChwcm9wcy5jb25maWcuaWQpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcihwcm9wcy5jb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PkVSUk9SOiBBIGZvcm0gbXVzdCBoYXZlIGFuIElEPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+KTtcbiAgICB9KVxuO1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQUEsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLG1CQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyx5QkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsVUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsTUFBQSxHQUFBWCxzQkFBQSxDQUFBQyxPQUFBO0FBQXNDLFNBQUFELHVCQUFBWSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQUcsUUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFQLENBQUEsT0FBQU0sTUFBQSxDQUFBRSxx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