@sapui5/sap.fe.templates 1.111.0 → 1.111.3

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.
@@ -346,6 +346,56 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
346
346
  };
347
347
  _proto._getTableBinding = function _getTableBinding(oTable) {
348
348
  return oTable && oTable.getRowBinding();
349
+ }
350
+
351
+ /**
352
+ * Find the last visible subsection and add the sapUxAPObjectPageSubSectionFitContainer CSS class if it contains only a gridTable.
353
+ *
354
+ * @param subSections The subsections to look for
355
+ * @private
356
+ */;
357
+ _proto.checkSectionsForGridTable = function checkSectionsForGridTable(subSections) {
358
+ const changeClassForTables = (event, lastVisibleSubSection) => {
359
+ var _this$searchTableInBl, _this$searchTableInBl2;
360
+ const blocks = [...lastVisibleSubSection.getBlocks(), ...lastVisibleSubSection.getMoreBlocks()];
361
+ if (blocks.length === 1 && (_this$searchTableInBl = this.searchTableInBlock(blocks[0])) !== null && _this$searchTableInBl !== void 0 && (_this$searchTableInBl2 = _this$searchTableInBl.getType()) !== null && _this$searchTableInBl2 !== void 0 && _this$searchTableInBl2.isA("sap.ui.mdc.table.GridTableType")) {
362
+ //In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
363
+ lastVisibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
364
+ lastVisibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
365
+ }
366
+ };
367
+ for (let subSectionIndex = subSections.length - 1; subSectionIndex >= 0; subSectionIndex--) {
368
+ if (subSections[subSectionIndex].getVisible()) {
369
+ const lastVisibleSubSection = subSections[subSectionIndex];
370
+ // We need to attach this event in order to manage the Object Page Lazy Loading mechanism
371
+ lastVisibleSubSection.attachEvent("modelContextChange", lastVisibleSubSection, changeClassForTables, this);
372
+ break;
373
+ }
374
+ }
375
+ }
376
+
377
+ /**
378
+ * Find a table in the SubSectionBlock.
379
+ *
380
+ * @param block The SubSectionBlock to look for
381
+ * @returns Table The table, if it exists
382
+ */;
383
+ _proto.searchTableInBlock = function searchTableInBlock(block) {
384
+ const control = block.content;
385
+ let tableAPI;
386
+ if (block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
387
+ // The table may currently be shown in a full screen dialog, we can then get the reference to the TableAPI
388
+ // control from the custom data of the place holder panel
389
+ if (control.isA("sap.m.Panel") && control.data("FullScreenTablePlaceHolder")) {
390
+ tableAPI = control.data("tableAPIreference");
391
+ } else if (control.isA("sap.fe.macros.table.TableAPI")) {
392
+ tableAPI = control;
393
+ }
394
+ if (tableAPI) {
395
+ return tableAPI.content;
396
+ }
397
+ }
398
+ return undefined;
349
399
  };
350
400
  _proto.onBeforeRendering = function onBeforeRendering() {
351
401
  var _this$oView$oViewData;
@@ -361,6 +411,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
361
411
  }).catch(function (oError) {
362
412
  Log.error("Error while retrieving the resource bundle", oError);
363
413
  });
414
+ let subSections;
415
+ if (this._getObjectPageLayoutControl().getUseIconTabBar()) {
416
+ const sections = this._getObjectPageLayoutControl().getSections();
417
+ for (const section of sections) {
418
+ subSections = section.getSubSections();
419
+ this.checkSectionsForGridTable(subSections);
420
+ }
421
+ } else {
422
+ subSections = this._getAllSubSections();
423
+ this.checkSectionsForGridTable(subSections);
424
+ }
364
425
  };
365
426
  _proto._onBeforeBinding = function _onBeforeBinding(oContext, mParameters) {
366
427
  // TODO: we should check how this comes together with the transaction helper, same to the change in the afterBinding
@@ -1017,7 +1078,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1017
1078
  }
1018
1079
  };
1019
1080
  _proto._findControlInSubSection = function _findControlInSubSection(aParentElement, aSubsection, aControls, bIsChart) {
1020
- const aSubSectionTables = [];
1021
1081
  for (let element = 0; element < aParentElement.length; element++) {
1022
1082
  let oElement = aParentElement[element].getContent instanceof Function && aParentElement[element].getContent();
1023
1083
  if (bIsChart) {
@@ -1044,10 +1104,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1044
1104
  }
1045
1105
  if (oElement && oElement.isA && oElement.isA("sap.ui.mdc.Table")) {
1046
1106
  aControls.push(oElement);
1047
- aSubSectionTables.push({
1048
- table: oElement,
1049
- gridTable: oElement.getType().isA("sap.ui.mdc.table.GridTableType")
1050
- });
1051
1107
  }
1052
1108
  if (oElement && oElement.isA && oElement.isA("sap.fe.macros.chart.ChartAPI")) {
1053
1109
  oElement = oElement.getContent instanceof Function && oElement.getContent();
@@ -1059,10 +1115,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1059
1115
  aControls.push(oElement);
1060
1116
  }
1061
1117
  }
1062
- if (aSubSectionTables.length === 1 && aParentElement.length === 1 && aSubSectionTables[0].gridTable && !aSubsection.hasStyleClass("sapUxAPObjectPageSubSectionFitContainer")) {
1063
- //In case there is only a single table in a section we fit that to the whole page so that the scrollbar comes only on table and not on page
1064
- aSubsection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
1065
- }
1066
1118
  };
1067
1119
  _proto._getAllSubSections = function _getAllSubSections() {
1068
1120
  const oObjectPage = this._getObjectPageLayoutControl();
@@ -1410,4 +1462,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
1410
1462
  }), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
1411
1463
  return ObjectPageController;
1412
1464
  }, false);
1413
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiUGFnaW5hdG9yIiwiUGFnaW5hdG9yT3ZlcnJpZGUiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25QcmltYXJ5QWN0aW9uIiwib0NvbnRyb2xsZXIiLCJvVmlldyIsIm9Db250ZXh0Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm1Db25kaXRpb25zIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJfc2F2ZURvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJvblRhYmxlQ29udGV4dENoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJvVGFibGUiLCJfZmluZFRhYmxlcyIsInNvbWUiLCJfb1RhYmxlIiwiZ2V0Um93QmluZGluZyIsIm9DdXJyZW50QWN0aW9uUHJvbWlzZSIsIl9lZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiYVRhYmxlQ29udGV4dHMiLCJnZXRUeXBlIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJnZXRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsInRoZW4iLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJzT3V0Ym91bmRUYXJnZXQiLCJzQ3JlYXRlUGF0aCIsIm9uTmF2aWdhdGVDaGFuZ2UiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImJTZWN0aW9uTmF2aWdhdGVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwic2VjdGlvbkxheW91dCIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsImdldFJlc291cmNlQnVuZGxlIiwib1Jlc291cmNlQnVuZGxlIiwic1RpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZ2V0SWQiLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uU3RhdGVDaGFuZ2UiLCJjbG9zZU9QTWVzc2FnZVN0cmlwIiwiaGlkZU1lc3NhZ2UiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJzZXRQcm9wZXJ0eSIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwidXNlTmV3TGF6eUxvYWRpbmciLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJvSXRlbUJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJ2aWV3IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsIml0ZW0iLCJmaWx0ZXIiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInNob3dNZXNzYWdlcyIsIl9nZXRUYWJsZUJpbmRpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsInJlc3BvbnNlIiwib0Vycm9yIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwiYkRyYWZ0TmF2aWdhdGlvbiIsIl9jbG9zZVNpZGVDb250ZW50Iiwib3BDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiZ2V0Q3JlYXRpb25Sb3ciLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib0RlbGVnYXRlT25CZWZvcmUiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5IiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIm9CaW5kaW5nIiwibGlzdEJpbmRpbmciLCJvUGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJvQmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsInNCaW5kaW5nUGF0aCIsInRlc3QiLCJzTGlzdEJpbmRpbmdQYXRoIiwicmVwbGFjZSIsIk9EYXRhTGlzdEJpbmRpbmciLCJvTW9kZWwiLCJfc2V0TGlzdEJpbmRpbmdBc3luYyIsImRldGFjaEV2ZW50IiwiYVNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImdldFVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJJc0luRWRpdE1vZGUiLCJiRWRpdGFibGVIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJpU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsIl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50IiwiYUFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJvQWN0aW9uIiwiZ2V0RW5hYmxlZCIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJnZXRCbG9ja3MiLCJibG9jayIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImNvbnRlbnQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJmb2N1cyIsIl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdCIsIm1lc3NhZ2VIYW5kbGVyIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInBhcnNlQ3VzdG9tRGF0YSIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib0ZpbmFsVUlTdGF0ZSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0IiwiYmluZExpc3QiLCJnZXRDb250ZXh0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwiY3JlYXRlZCIsImUiLCJ0cmFjZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0NhY2hlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiZm5VcGRhdGVSZWxhdGVkQXBwcyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50Iiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ2aWV3SWQiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJtb2RlbCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwid2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQiLCJfdmFsaWRhdGVEb2N1bWVudCIsImNvbnRyb2wiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImlzVHJhbnNpZW50Iiwic3luY1Rhc2siLCJhcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiUHJvbWlzZSIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsImV2ZW50Iiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImFTdWJTZWN0aW9uVGFibGVzIiwiZWxlbWVudCIsIm1BZ2dyZWdhdGlvbnMiLCJnZXRBZ2dyZWdhdGlvbiIsImFJdGVtcyIsIm9JdGVtIiwiZ2V0TWFpbkNvbnRlbnQiLCJ0YWJsZSIsImdyaWRUYWJsZSIsImhhc1N0eWxlQ2xhc3MiLCJhZGRTdHlsZUNsYXNzIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX2dldEFsbEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJfZmluZENoYXJ0cyIsImFDaGFydHMiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwib1NpbmdsZUNvbnRleHQiLCJvU3ViQ2hhcnRDb250ZXh0RGF0YSIsImNvbnRleHREYXRhIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9QYWdlTGV2ZWxTViIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJhdHRyaWJ1dGVzIiwib0NvbmZpZ3VyYXRpb25zIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJhQ29uZmlndXJhdGlvbnMiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwiX3NldEJyZWFkY3J1bWJMaW5rcyIsImFQcm9taXNlcyIsImFTa2lwUGFyYW1ldGVyaXplZCIsInNOZXdQYXRoIiwiYVBhdGhQYXJ0cyIsInNwbGl0Iiwic1BhdGgiLCJzaGlmdCIsInNwbGljZSIsInNQYXRoUGFydCIsIm9Sb290Vmlld0NvbnRyb2xsZXIiLCJzUGFyYW1ldGVyUGF0aCIsImJSZXN1bHRDb250ZXh0IiwiZ2V0VGl0bGVJbmZvRnJvbVBhdGgiLCJ0aXRsZUhpZXJhcmNoeUluZm9zIiwiaWR4IiwiaGllcmFyY2h5UG9zaXRpb24iLCJvTGluayIsInRpdGxlSGllcmFyY2h5SW5mbyIsImdldExpbmtzIiwiTGluayIsInNldFRleHQiLCJzZXRIcmVmIiwiZW5jb2RlVVJJIiwiYWRkTGluayIsIm9EYXRhUG9pbnRzIiwiZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvU2hlbGxTZXJ2aWNlcyIsInJlcXVlc3RPYmplY3QiLCJmbkdldExpbmtzIiwiZm5PbkVycm9yIiwiZm5TZXRMaW5rRW5hYmxlbWVudCIsImlkIiwiYVN1cHBvcnRlZExpbmtzIiwic0xpbmtJZCIsInN1cHBvcnRlZCIsIm9TdWJEYXRhUG9pbnRzIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGNvbm5lY3QsIGRpc2Nvbm5lY3QsIGlzQ29ubmVjdGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQWN0aXZpdHlTeW5jXCI7XG5pbXBvcnQgeyBvcGVuTWFuYWdlRGlhbG9nLCBzaG93VXNlckRldGFpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9NYW5hZ2VcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnJlYWRDcnVtYnMgZnJvbSBcInNhcC91eGFwL0JyZWFkQ3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBhbnk7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3Zlcjtcblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbjogYW55O1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIChvT2JqZWN0UGFnZSBhcyBhbnkpLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcCBvbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZm5TaG93T1BNZXNzYWdlKCkge1xuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlclxuXHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIikuZ2V0T2JqZWN0KCkpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5zaG93TWVzc2FnZXMobWVzc2FnZXMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gcmVzcG9uc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcbiAgICBcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuICAgIFx0XHRcdFx0IFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHRpZiAoaVZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGxldCBvQmluZGluZyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmxpc3RCaW5kaW5nO1xuXHRcdFx0Y29uc3Qgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAob1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nVG9Vc2UgPSBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nVG9Vc2UsIG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZykge1xuXHRcdFx0XHRpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGJpbmRpbmcgdHlwZSBpcyBub3QgT0RhdGFMaXN0QmluZGluZyBiZWNhdXNlIG9mIGEgZGVlcGxpbmsgbmF2aWdhdGlvbiBvciBhIHJlZnJlc2ggb2YgdGhlIHBhZ2Vcblx0XHRcdFx0XHQvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdFxuXHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0XHRpZiAoL1xcKFteXFwpXSpcXCkkLy50ZXN0KHNCaW5kaW5nUGF0aCkpIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBjdXJyZW50IGJpbmRpbmcgcGF0aCBlbmRzIHdpdGggKHh4eCksIHNvIHdlIGNyZWF0ZSB0aGUgbGlzdEJpbmRpbmcgYnkgcmVtb3ZpbmcgKHh4eClcblx0XHRcdFx0XHRcdGNvbnN0IHNMaXN0QmluZGluZ1BhdGggPSBzQmluZGluZ1BhdGgucmVwbGFjZSgvXFwoW15cXCldKlxcKSQvLCBcIlwiKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nID0gbmV3IChPRGF0YUxpc3RCaW5kaW5nIGFzIGFueSkob0JpbmRpbmcub01vZGVsLCBzTGlzdEJpbmRpbmdQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IF9zZXRMaXN0QmluZGluZ0FzeW5jID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dHMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBjdXJyZW50IGJpbmRpbmcgZG9lc24ndCBlbmQgd2l0aCAoeHh4KSAtLT4gdGhlIGxhc3Qgc2VnbWVudCBpcyBhIDEtMSBuYXZpZ2F0aW9uLCBzbyB3ZSBkb24ndCBkaXNwbGF5IHRoZSBwYWdpbmF0b3Jcblx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUodW5kZWZpbmVkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9PYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRcdGxldCBpU2tpcCA9IDI7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgYW55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgYW55KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0b05hdkNvbnRhaW5lci5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2U6IGFueSkge1xuXHRcdGxldCBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFBY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYUFjdGlvbnMgJiYgYUFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gYUFjdGlvbnMuZmluZChmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAob0FjdGlvbi5pc0EoXCJzYXAuZmUubWFjcm9zLlNoYXJlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Ly8gc2luY2UgU2hhcmVBUEkgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2JhbGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghb0FjdGlvbi5pc0EoXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmICFvQWN0aW9uLmlzQShcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRWaXNpYmxlKCkgJiYgb0FjdGlvbi5nZXRFbmFibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCk7XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBibG9jayA9IDA7IGJsb2NrIDwgYUJsb2Nrcy5sZW5ndGg7IGJsb2NrKyspIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChhQmxvY2tzW2Jsb2NrXS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbnRhaW5lciA9IDA7IGZvcm1Db250YWluZXIgPCBhRm9ybUNvbnRhaW5lcnMubGVuZ3RoOyBmb3JtQ29udGFpbmVyKyspIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gYUZvcm1Db250YWluZXJzW2Zvcm1Db250YWluZXJdLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRWxlbWVudCA9IDA7IGZvcm1FbGVtZW50IDwgYUZvcm1FbGVtZW50cy5sZW5ndGg7IGZvcm1FbGVtZW50KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGFGb3JtRWxlbWVudHNbZm9ybUVsZW1lbnRdLmdldEZpZWxkcygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBmaXJzdCBmaWVsZCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSW5wdXRCYXNlIChlLmcuIGNvdWxkIGJlIGEgVGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU28gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGhhcyBhIGdldFJlcXVpcmVkIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRzWzBdLmdldFJlcXVpcmVkICYmIGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQoKSAmJiAhYUZpZWxkc1swXS5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYUZpZWxkc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIHNlYXJjaGluZyBmb3IgbWFuZGFvdHJ5IGVtcHR5IGZpZWxkOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRsZXQgb0ZpZWxkVG9Gb2N1czogYW55O1xuXHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvTWFuZGF0b3J5RmllbGQuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9PYmplY3RQYWdlIGFzIGFueSkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpIHx8IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogYW55KSB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0b0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlLCBuZWVkIHRvIGJlIGZpeGVkIGFuZCByZXZpZXcgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gaW5pdCBldmVudCBvZiB0aGUgTURDIHRhYmxlcyAobm90IHlldCBleGlzdGluZykgYW5kIHNob3VsZCBiZSBwYXJ0XG5cdFx0Ly8gb2YgYW55IGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqIEBwYXJhbSBvTGlzdEJpbmRpbmdcblx0XHQgKi9cblx0XHRhc3luYyBmdW5jdGlvbiBlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlOiBhbnksIG9MaXN0QmluZGluZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRmFzdENyZWF0aW9uUm93ID0gb1RhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRsZXQgb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLCBvRmFzdENyZWF0aW9uQ29udGV4dDtcblxuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBvRmluYWxVSVN0YXRlO1xuXHRcdFx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93LmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9MaXN0QmluZGluZy5nZXRDb250ZXh0KCksIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdFx0JCRncm91cElkOiBcImRvTm90U3VibWl0XCJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0LyogZG8gbm90aGluZyAqL1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChvRmFzdENyZWF0aW9uQ29udGV4dCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9GYXN0Q3JlYXRpb25Db250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZSwgb0JpbmRpbmcpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuX2VkaXRGbG93LmNvbXB1dGVFZGl0TW9kZShvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRcdFx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiBpbiBjYXNlIHdlIHN3aXRjaCB0byBhbm90aGVyIGVsZW1lbnQgKGUuZy4gaW4gRkNMKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpbmFsIFVJIFN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzIG9uY2UgRGF0YSBpcyByZWNlaXZlZCBpbiBjYXNlIG9mIGJpbmRpbmcgY2FjaGUgaXMgbm90IGF2YWlsYWJsZVxuXHRcdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBzaW5jZSB3ZSBuZWVkIHRvIGNhbGwgX3VwZGF0ZVJlbGF0ZWRBcHBzIG1ldGhvZCBvbmx5IGFmdGVyIGRhdGEgZm9yIE9iamVjdCBQYWdlIGlzIHJlY2VpdmVkIChpZiB0aGVyZSBpcyBubyBiaW5kaW5nKVxuXHRcdFx0aWYgKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkub0NhY2hlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmblVwZGF0ZVJlbGF0ZWRBcHBzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBvQmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKHZpZXdJZCwgdGhpcy5nZXRWaWV3KCkpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IG9mIHRoZSBEcmFmdFJvb3QgcGF0aC5cblx0ICogSWYgYSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgZHJhZnQgUm9vdCBQYXRoLCB0aGlzIG1ldGhvZCByZXR1cm5zIGl0cyBiaW5kaW5nQ29udGV4dC5cblx0ICogV2hlcmUgbm8gdmlldyBpcyBmb3VuZCBhIG5ldyBjcmVhdGVkIGNvbnRleHQgaXMgcmV0dXJuZWQuXG5cdCAqIFRoZSBuZXcgY3JlYXRlZCBjb250ZXh0IHJlcXVlc3QgdGhlIGtleSBvZiB0aGUgZW50aXR5IGluIG9yZGVyIHRvIGdldCB0aGUgRXRhZyBvZiB0aGlzIGVudGl0eS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldERyYWZ0Um9vdFBhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyBhIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIGdldERyYWZ0Um9vdENvbnRleHQoKTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpO1xuXHRcdFx0bGV0IHNpbXBsZURyYWZ0Um9vdENvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRpZiAoZHJhZnRSb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgYSB2aWV3IG1hdGNoZXMgd2l0aCB0aGUgZHJhZnQgcm9vdCBwYXRoXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gZHJhZnRSb290Q29udGV4dFBhdGgpXG5cdFx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdGlmIChleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdHNpbXBsZURyYWZ0Um9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIik7XG5cdFx0XHRcdGlmIChzaW1wbGVEcmFmdFJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IGRyYWZ0Um9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNpbXBsZURyYWZ0Um9vdENvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRcdHNpbXBsZURyYWZ0Um9vdENvbnRleHQgPSBtb2RlbC5iaW5kQ29udGV4dChkcmFmdFJvb3RDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHNpbXBsZURyYWZ0Um9vdENvbnRleHQpO1xuXHRcdFx0XHQvLyBTdG9yZSB0aGlzIG5ldyBjcmVhdGVkIGNvbnRleHQgdG8gdXNlIGl0IG9uIHRoZSBuZXh0IGl0ZXJhdGlvbnNcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVEcmFmdFJvb3RDb250ZXh0XCIsIHNpbXBsZURyYWZ0Um9vdENvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlRHJhZnRSb290Q29udGV4dDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBhbnlbXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gQ29yZS5ieUlkKENvcmUuZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQoKSk7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoY29udGV4dCAmJiAhY29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHQvLyBXYWl0IGZvciB0aGUgcGVuZGluZyBjaGFuZ2VzIGJlZm9yZSBzdGFydGluZyB0aGlzIHZhbGlkYXRpb25cblx0XHRcdGF3YWl0IHRoaXMuX2VkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGdsb2JhbFNpZGVFZmZlY3RzLm1hcCgoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSBhd2FpdCB0aGlzLmdldERyYWZ0Um9vdENvbnRleHQoKTtcblx0XHRcdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdFx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCwgaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX3NhdmVEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBhbnkgPSB7XG5cdFx0XHRcdGNyZWF0aW9uTW9kZTogb1RhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0Y3JlYXRlQXRFbmQ6IG9UYWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYkNyZWF0ZURvY3VtZW50ID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKSAmJlxuXHRcdFx0XHRPYmplY3Qua2V5cyhtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE9iamVjdCgpKS5sZW5ndGggPiAxO1xuXHRcdFx0aWYgKGJDcmVhdGVEb2N1bWVudCkge1xuXHRcdFx0XHQvLyB0aGUgYlNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleVxuXHRcdFx0XHQvLyB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJTa2lwU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudChvQmluZGluZywgbVBhcmFtZXRlcnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYUJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYVdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0YmluZGluZ3M6IGFCaW5kaW5nc1xuXHRcdFx0fTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGlmIChDb21tb25VdGlscy5yZXNvbHZlU3RyaW5ndG9Cb29sZWFuKG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIikpKSB7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhQ29udHJvbHM6IGFueSwgYklzQ2hhcnQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25UYWJsZXMgPSBbXTtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5tQWdncmVnYXRpb25zICYmIG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9JdGVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMucHVzaCh7XG5cdFx0XHRcdFx0dGFibGU6IG9FbGVtZW50LFxuXHRcdFx0XHRcdGdyaWRUYWJsZTogb0VsZW1lbnQuZ2V0VHlwZSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkNoYXJ0QVBJXCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldENvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5sZW5ndGggPT09IDEgJiZcblx0XHRcdGFQYXJlbnRFbGVtZW50Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXNbMF0uZ3JpZFRhYmxlICYmXG5cdFx0XHQhYVN1YnNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKVxuXHRcdCkge1xuXHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0YVN1YnNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZiAob09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLl9lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2VkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlcnJ9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyBhbiBhY3Rpb24gLSBib3VuZC91bmJvdW5kIGFuZCBzZXRzIHRoZSBwYWdlIGRpcnR5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBwcm9taXNlXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DYWxsQWN0aW9uKG9WaWV3OiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKG9Db250cm9sbGVyOiBhbnksIG9Tb3VyY2U6IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSwgc0NvbnRyb2xDb25maWc6IGFueSwgc0NvbGxlY3Rpb25QYXRoOiBhbnkpIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpO1xuXHRcdFx0bGV0IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChcblx0XHRcdFx0b09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmXG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDUwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0KChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUaXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zY3JvbGxUb1NlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25TdGF0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBv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Q0FBQyxDQUFDO2tCQUMzQkEsV0FBVyxDQUFDRixlQUFlLENBQUMsR0FBR0osYUFBYSxDQUFDRyxhQUFhLENBQUM7a0JBQzNESCxhQUFhLEdBQUdDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUQsYUFBYSxFQUFFTSxXQUFXLENBQUM7a0JBQ3JELE9BQU9OLGFBQWEsQ0FBQ0csYUFBYSxDQUFDO2dCQUNwQztjQUNEO1lBQ0Q7VUFDRDtVQUVBLElBQUlILGFBQWEsRUFBRTtZQUNsQixLQUFLLE1BQU1oZ0IsSUFBSSxJQUFJZ2dCLGFBQWEsRUFBRTtjQUNqQyxJQUFJaGdCLElBQUksQ0FBQ3FWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUlyVixJQUFJLENBQUNxVixPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BFelMsT0FBTyxDQUFDNUMsSUFBSSxDQUFDLEdBQUdnZ0IsYUFBYSxDQUFDaGdCLElBQUksQ0FBQztjQUNwQztZQUNEO1VBQ0Q7VUFDQTtVQUNBa2YsY0FBYyxDQUNacUIscUJBQXFCLENBQUMsQ0FDdEI7WUFDQ25MLE1BQU0sRUFBRTtjQUNQcFMsY0FBYyxFQUFFNmMsVUFBVSxDQUFDN2MsY0FBYztjQUN6Q0MsTUFBTSxFQUFFNGMsVUFBVSxDQUFDNWM7WUFDcEIsQ0FBQztZQUNEdWQsTUFBTSxFQUFFNWQ7VUFDVCxDQUFDLENBQ0QsQ0FBQyxDQUNENUQsSUFBSSxDQUFFeWhCLE1BQU0sSUFBSztZQUNqQixPQUFPbkIsbUJBQW1CLENBQUNuZ0IsR0FBRyxFQUFFc2hCLE1BQU0sQ0FBQztVQUN4QyxDQUFDLENBQUMsQ0FDRDlmLEtBQUssQ0FBQzBlLFNBQVMsQ0FBQztRQUNuQjtNQUNEO0lBQ0QsQ0FBQztJQUFBO0VBQUEsRUFsdkNpQ3RYLGNBQWM7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUEsT0FtL0NsQ3hOLG9CQUFvQjtBQUFBIn0=
1465
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiUGFnaW5hdG9yIiwiUGFnaW5hdG9yT3ZlcnJpZGUiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25QcmltYXJ5QWN0aW9uIiwib0NvbnRyb2xsZXIiLCJvVmlldyIsIm9Db250ZXh0Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm1Db25kaXRpb25zIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJfc2F2ZURvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJvblRhYmxlQ29udGV4dENoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJvVGFibGUiLCJfZmluZFRhYmxlcyIsInNvbWUiLCJfb1RhYmxlIiwiZ2V0Um93QmluZGluZyIsIm9DdXJyZW50QWN0aW9uUHJvbWlzZSIsIl9lZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiYVRhYmxlQ29udGV4dHMiLCJnZXRUeXBlIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJnZXRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsInRoZW4iLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJzT3V0Ym91bmRUYXJnZXQiLCJzQ3JlYXRlUGF0aCIsIm9uTmF2aWdhdGVDaGFuZ2UiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImJTZWN0aW9uTmF2aWdhdGVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwic2VjdGlvbkxheW91dCIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsImdldFJlc291cmNlQnVuZGxlIiwib1Jlc291cmNlQnVuZGxlIiwic1RpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZ2V0SWQiLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uU3RhdGVDaGFuZ2UiLCJjbG9zZU9QTWVzc2FnZVN0cmlwIiwiaGlkZU1lc3NhZ2UiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJzZXRQcm9wZXJ0eSIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwidXNlTmV3TGF6eUxvYWRpbmciLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJvSXRlbUJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJ2aWV3IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsIml0ZW0iLCJmaWx0ZXIiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsInNob3dNZXNzYWdlcyIsIl9nZXRUYWJsZUJpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImV2ZW50IiwibGFzdFZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwiY29udHJvbCIsImNvbnRlbnQiLCJ0YWJsZUFQSSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJhcHBseSIsIm9WaWV3RGF0YSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJDb21tb25IZWxwZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRBcHBDb21wb25lbnQiLCJvbkFmdGVyUmVuZGVyaW5nIiwicmVzcG9uc2UiLCJvRXJyb3IiLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsImJEcmFmdE5hdmlnYXRpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQmluZGluZ1BhdGgiLCJ0ZXN0Iiwic0xpc3RCaW5kaW5nUGF0aCIsInJlcGxhY2UiLCJPRGF0YUxpc3RCaW5kaW5nIiwib01vZGVsIiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhQWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRFbmFibGVkIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJoaXN0b3J5IiwiYmFjayIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJvQmluZGluZ0NvbnRleHQiLCJfc2lkZUVmZmVjdHMiLCJjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwicGFyc2VDdXN0b21EYXRhIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiY2xlYXJTZWxlY3Rpb24iLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvRmluYWxVSVN0YXRlIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwib0xpc3RCaW5kaW5nIiwib0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nIiwib0Zhc3RDcmVhdGlvbkNvbnRleHQiLCJiaW5kTGlzdCIsImdldENvbnRleHQiLCIkJHVwZGF0ZUdyb3VwSWQiLCIkJGdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiZm5IYW5kbGVDaGFuZ2UiLCJkZXRhY2hDaGFuZ2UiLCJjb21wdXRlRWRpdE1vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImNvbm5lY3QiLCJvQ2FjaGUiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJvblBhZ2VSZWFkeSIsInNldEZvY3VzIiwiaXNJbkRpc3BsYXlNb2RlIiwib1NlbGVjdGVkU2VjdGlvbiIsIkNvcmUiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJiSXNTdGlja3lNb2RlIiwib0FwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInZpZXdJZCIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJmb3JjZUZvY3VzIiwiRXJyb3IiLCJfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbiIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2V4ZWN1dGVIZWFkZXJTaG9ydGN1dCIsInNCdXR0b25JZCIsIm9CdXR0b24iLCJvRWxlbWVudCIsImZpcmVCdXR0b25QcmVzcyIsIl9leGVjdXRlRm9vdGVyU2hvcnRjdXQiLCJnZXRGb290ZXIiLCJnZXROYW1lIiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwib01lc3NhZ2UiLCJ2YWxpZGF0aW9uIiwidHlwZSIsInRhcmdldCIsImluZGV4T2YiLCJvUmV0Iiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwiZ2V0TGVuZ3RoIiwic2V0VmlzaWJsZSIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsImdldERyYWZ0Um9vdENvbnRleHQiLCJjb250ZXh0IiwiZHJhZnRSb290Q29udGV4dFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwic2ltcGxlRHJhZnRSb290Q29udGV4dCIsImV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UiLCJnZXRJbnN0YW5jZWRWaWV3cyIsInBhZ2VWaWV3IiwiaW50ZXJuYWxNb2RlbCIsIm1vZGVsIiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJ3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQiLCJpc1RyYW5zaWVudCIsInN5bmNUYXNrIiwiYXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsIlByb21pc2UiLCJhbGwiLCJzaWRlRWZmZWN0cyIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImRyYWZ0Um9vdENvbnRleHQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiYVdhaXRDcmVhdGVEb2N1bWVudHMiLCJiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImNyZWF0aW9uTW9kZSIsImNyZWF0aW9uUm93IiwiY3JlYXRlQXRFbmQiLCJiQ3JlYXRlRG9jdW1lbnQiLCJiU2tpcFNpZGVFZmZlY3RzIiwiY3JlYXRlRG9jdW1lbnQiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImlzTG9ja2VkIiwiX21hbmFnZUNvbGxhYm9yYXRpb24iLCJvcGVuTWFuYWdlRGlhbG9nIiwiX3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMiLCJzaG93VXNlckRldGFpbHMiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJjYW5jZWxEb2N1bWVudCIsImFwcGx5RG9jdW1lbnQiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiZWxlbWVudCIsIm1BZ2dyZWdhdGlvbnMiLCJnZXRBZ2dyZWdhdGlvbiIsImFJdGVtcyIsIm9JdGVtIiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJhUHJvbWlzZXMiLCJhU2tpcFBhcmFtZXRlcml6ZWQiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwidGl0bGVIaWVyYXJjaHlJbmZvcyIsImlkeCIsImhpZXJhcmNoeVBvc2l0aW9uIiwib0xpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJnZXRMaW5rcyIsIkxpbmsiLCJzZXRUZXh0Iiwic2V0SHJlZiIsImVuY29kZVVSSSIsImFkZExpbmsiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBCcmVhZENydW1icyBmcm9tIFwic2FwL3V4YXAvQnJlYWRDcnVtYnNcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IGFueTtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uOiBhbnk7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHNcIiwge1xuXHRcdFx0dmlzaWJpbGl0eTogZmFsc2UsXG5cdFx0XHRpdGVtczogbnVsbFxuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgKG9PYmplY3RQYWdlIGFzIGFueSkuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIik7XG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uLm9JdGVtQmluZGluZy5hdHRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRFbmFibGVkXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdFZpc2libGVcIiwgdHJ1ZSk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cdFx0aWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIHdoZW4gbGVhdmluZyB0aGUgYXBwXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKSB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uQVBJID0gdGhpcy5nZXRFeHRlbnNpb25BUEkoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyXG5cdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKS5nZXRPYmplY3QoKSlcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLnNob3dNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBsYXN0IHZpc2libGUgc3Vic2VjdGlvbiBhbmQgYWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBncmlkVGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3Vic2VjdGlvbnMgdG8gbG9vayBmb3Jcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgY2hlY2tTZWN0aW9uc0ZvckdyaWRUYWJsZShzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSkge1xuXHRcdGNvbnN0IGNoYW5nZUNsYXNzRm9yVGFibGVzID0gKGV2ZW50OiBFdmVudCwgbGFzdFZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKV07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGJsb2Nrcy5sZW5ndGggPT09IDEgJiZcblx0XHRcdFx0dGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jaylcblx0XHRcdFx0XHQ/LmdldFR5cGUoKVxuXHRcdFx0XHRcdD8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzdWJTZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb25JbmRleCA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IHN1YlNlY3Rpb25JbmRleCA+PSAwOyBzdWJTZWN0aW9uSW5kZXgtLSkge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF0uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RWaXNpYmxlU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24sIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiB0aGUgU3ViU2VjdGlvbkJsb2NrLlxuXHQgKlxuXHQgKiBAcGFyYW0gYmxvY2sgVGhlIFN1YlNlY3Rpb25CbG9jayB0byBsb29rIGZvclxuXHQgKiBAcmV0dXJucyBUYWJsZSBUaGUgdGFibGUsIGlmIGl0IGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzZWFyY2hUYWJsZUluQmxvY2soYmxvY2s6IFN1YlNlY3Rpb25CbG9jaykge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudCBhcyBUYWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3Lm9WaWV3RGF0YT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdCgodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSByZXNwb25zZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdFx0bGV0IHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdGlmICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdFx0c3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0ZvckdyaWRUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0ZvckdyaWRUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcbiAgICBcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuICAgIFx0XHRcdFx0IFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHRpZiAoaVZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGxldCBvQmluZGluZyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmxpc3RCaW5kaW5nO1xuXHRcdFx0Y29uc3Qgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAob1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nVG9Vc2UgPSBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nVG9Vc2UsIG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZykge1xuXHRcdFx0XHRpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGJpbmRpbmcgdHlwZSBpcyBub3QgT0RhdGFMaXN0QmluZGluZyBiZWNhdXNlIG9mIGEgZGVlcGxpbmsgbmF2aWdhdGlvbiBvciBhIHJlZnJlc2ggb2YgdGhlIHBhZ2Vcblx0XHRcdFx0XHQvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdFxuXHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0XHRpZiAoL1xcKFteXFwpXSpcXCkkLy50ZXN0KHNCaW5kaW5nUGF0aCkpIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBjdXJyZW50IGJpbmRpbmcgcGF0aCBlbmRzIHdpdGggKHh4eCksIHNvIHdlIGNyZWF0ZSB0aGUgbGlzdEJpbmRpbmcgYnkgcmVtb3ZpbmcgKHh4eClcblx0XHRcdFx0XHRcdGNvbnN0IHNMaXN0QmluZGluZ1BhdGggPSBzQmluZGluZ1BhdGgucmVwbGFjZSgvXFwoW15cXCldKlxcKSQvLCBcIlwiKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nID0gbmV3IChPRGF0YUxpc3RCaW5kaW5nIGFzIGFueSkob0JpbmRpbmcub01vZGVsLCBzTGlzdEJpbmRpbmdQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IF9zZXRMaXN0QmluZGluZ0FzeW5jID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dHMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBjdXJyZW50IGJpbmRpbmcgZG9lc24ndCBlbmQgd2l0aCAoeHh4KSAtLT4gdGhlIGxhc3Qgc2VnbWVudCBpcyBhIDEtMSBuYXZpZ2F0aW9uLCBzbyB3ZSBkb24ndCBkaXNwbGF5IHRoZSBwYWdpbmF0b3Jcblx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUodW5kZWZpbmVkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9PYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRcdGxldCBpU2tpcCA9IDI7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgYW55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgYW55KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0b05hdkNvbnRhaW5lci5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2U6IGFueSkge1xuXHRcdGxldCBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFBY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYUFjdGlvbnMgJiYgYUFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gYUFjdGlvbnMuZmluZChmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAob0FjdGlvbi5pc0EoXCJzYXAuZmUubWFjcm9zLlNoYXJlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Ly8gc2luY2UgU2hhcmVBUEkgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2JhbGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghb0FjdGlvbi5pc0EoXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmICFvQWN0aW9uLmlzQShcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRWaXNpYmxlKCkgJiYgb0FjdGlvbi5nZXRFbmFibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCk7XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBibG9jayA9IDA7IGJsb2NrIDwgYUJsb2Nrcy5sZW5ndGg7IGJsb2NrKyspIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChhQmxvY2tzW2Jsb2NrXS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbnRhaW5lciA9IDA7IGZvcm1Db250YWluZXIgPCBhRm9ybUNvbnRhaW5lcnMubGVuZ3RoOyBmb3JtQ29udGFpbmVyKyspIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gYUZvcm1Db250YWluZXJzW2Zvcm1Db250YWluZXJdLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRWxlbWVudCA9IDA7IGZvcm1FbGVtZW50IDwgYUZvcm1FbGVtZW50cy5sZW5ndGg7IGZvcm1FbGVtZW50KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGFGb3JtRWxlbWVudHNbZm9ybUVsZW1lbnRdLmdldEZpZWxkcygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBmaXJzdCBmaWVsZCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSW5wdXRCYXNlIChlLmcuIGNvdWxkIGJlIGEgVGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU28gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGhhcyBhIGdldFJlcXVpcmVkIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRzWzBdLmdldFJlcXVpcmVkICYmIGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQoKSAmJiAhYUZpZWxkc1swXS5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYUZpZWxkc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIHNlYXJjaGluZyBmb3IgbWFuZGFvdHJ5IGVtcHR5IGZpZWxkOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRsZXQgb0ZpZWxkVG9Gb2N1czogYW55O1xuXHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvTWFuZGF0b3J5RmllbGQuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9PYmplY3RQYWdlIGFzIGFueSkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpIHx8IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogYW55KSB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0b0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlLCBuZWVkIHRvIGJlIGZpeGVkIGFuZCByZXZpZXcgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gaW5pdCBldmVudCBvZiB0aGUgTURDIHRhYmxlcyAobm90IHlldCBleGlzdGluZykgYW5kIHNob3VsZCBiZSBwYXJ0XG5cdFx0Ly8gb2YgYW55IGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqIEBwYXJhbSBvTGlzdEJpbmRpbmdcblx0XHQgKi9cblx0XHRhc3luYyBmdW5jdGlvbiBlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlOiBhbnksIG9MaXN0QmluZGluZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRmFzdENyZWF0aW9uUm93ID0gb1RhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRsZXQgb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLCBvRmFzdENyZWF0aW9uQ29udGV4dDtcblxuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBvRmluYWxVSVN0YXRlO1xuXHRcdFx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93LmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9MaXN0QmluZGluZy5nZXRDb250ZXh0KCksIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdFx0JCRncm91cElkOiBcImRvTm90U3VibWl0XCJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0LyogZG8gbm90aGluZyAqL1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChvRmFzdENyZWF0aW9uQ29udGV4dCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9GYXN0Q3JlYXRpb25Db250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZSwgb0JpbmRpbmcpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuX2VkaXRGbG93LmNvbXB1dGVFZGl0TW9kZShvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRcdFx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiBpbiBjYXNlIHdlIHN3aXRjaCB0byBhbm90aGVyIGVsZW1lbnQgKGUuZy4gaW4gRkNMKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpbmFsIFVJIFN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzIG9uY2UgRGF0YSBpcyByZWNlaXZlZCBpbiBjYXNlIG9mIGJpbmRpbmcgY2FjaGUgaXMgbm90IGF2YWlsYWJsZVxuXHRcdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBzaW5jZSB3ZSBuZWVkIHRvIGNhbGwgX3VwZGF0ZVJlbGF0ZWRBcHBzIG1ldGhvZCBvbmx5IGFmdGVyIGRhdGEgZm9yIE9iamVjdCBQYWdlIGlzIHJlY2VpdmVkIChpZiB0aGVyZSBpcyBubyBiaW5kaW5nKVxuXHRcdFx0aWYgKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkub0NhY2hlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmblVwZGF0ZVJlbGF0ZWRBcHBzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBvQmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKHZpZXdJZCwgdGhpcy5nZXRWaWV3KCkpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IG9mIHRoZSBEcmFmdFJvb3QgcGF0aC5cblx0ICogSWYgYSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgZHJhZnQgUm9vdCBQYXRoLCB0aGlzIG1ldGhvZCByZXR1cm5zIGl0cyBiaW5kaW5nQ29udGV4dC5cblx0ICogV2hlcmUgbm8gdmlldyBpcyBmb3VuZCBhIG5ldyBjcmVhdGVkIGNvbnRleHQgaXMgcmV0dXJuZWQuXG5cdCAqIFRoZSBuZXcgY3JlYXRlZCBjb250ZXh0IHJlcXVlc3QgdGhlIGtleSBvZiB0aGUgZW50aXR5IGluIG9yZGVyIHRvIGdldCB0aGUgRXRhZyBvZiB0aGlzIGVudGl0eS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldERyYWZ0Um9vdFBhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyBhIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIGdldERyYWZ0Um9vdENvbnRleHQoKTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpO1xuXHRcdFx0bGV0IHNpbXBsZURyYWZ0Um9vdENvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRpZiAoZHJhZnRSb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgYSB2aWV3IG1hdGNoZXMgd2l0aCB0aGUgZHJhZnQgcm9vdCBwYXRoXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gZHJhZnRSb290Q29udGV4dFBhdGgpXG5cdFx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdGlmIChleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdHNpbXBsZURyYWZ0Um9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIik7XG5cdFx0XHRcdGlmIChzaW1wbGVEcmFmdFJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IGRyYWZ0Um9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNpbXBsZURyYWZ0Um9vdENvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRcdHNpbXBsZURyYWZ0Um9vdENvbnRleHQgPSBtb2RlbC5iaW5kQ29udGV4dChkcmFmdFJvb3RDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHNpbXBsZURyYWZ0Um9vdENvbnRleHQpO1xuXHRcdFx0XHQvLyBTdG9yZSB0aGlzIG5ldyBjcmVhdGVkIGNvbnRleHQgdG8gdXNlIGl0IG9uIHRoZSBuZXh0IGl0ZXJhdGlvbnNcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVEcmFmdFJvb3RDb250ZXh0XCIsIHNpbXBsZURyYWZ0Um9vdENvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlRHJhZnRSb290Q29udGV4dDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBhbnlbXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gQ29yZS5ieUlkKENvcmUuZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQoKSk7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoY29udGV4dCAmJiAhY29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHQvLyBXYWl0IGZvciB0aGUgcGVuZGluZyBjaGFuZ2VzIGJlZm9yZSBzdGFydGluZyB0aGlzIHZhbGlkYXRpb25cblx0XHRcdGF3YWl0IHRoaXMuX2VkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGdsb2JhbFNpZGVFZmZlY3RzLm1hcCgoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSBhd2FpdCB0aGlzLmdldERyYWZ0Um9vdENvbnRleHQoKTtcblx0XHRcdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdFx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCwgaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX3NhdmVEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBhbnkgPSB7XG5cdFx0XHRcdGNyZWF0aW9uTW9kZTogb1RhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0Y3JlYXRlQXRFbmQ6IG9UYWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYkNyZWF0ZURvY3VtZW50ID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKSAmJlxuXHRcdFx0XHRPYmplY3Qua2V5cyhtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE9iamVjdCgpKS5sZW5ndGggPiAxO1xuXHRcdFx0aWYgKGJDcmVhdGVEb2N1bWVudCkge1xuXHRcdFx0XHQvLyB0aGUgYlNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleVxuXHRcdFx0XHQvLyB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJTa2lwU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudChvQmluZGluZywgbVBhcmFtZXRlcnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYUJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYVdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0YmluZGluZ3M6IGFCaW5kaW5nc1xuXHRcdFx0fTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGlmIChDb21tb25VdGlscy5yZXNvbHZlU3RyaW5ndG9Cb29sZWFuKG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIikpKSB7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhQ29udHJvbHM6IGFueSwgYklzQ2hhcnQ/OiBib29sZWFuKSB7XG5cdFx0Zm9yIChsZXQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBhUGFyZW50RWxlbWVudC5sZW5ndGg7IGVsZW1lbnQrKykge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubUFnZ3JlZ2F0aW9ucyAmJiBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JdGVtLmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvSXRlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZiAob09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLl9lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2VkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlcnJ9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyBhbiBhY3Rpb24gLSBib3VuZC91bmJvdW5kIGFuZCBzZXRzIHRoZSBwYWdlIGRpcnR5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBwcm9taXNlXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DYWxsQWN0aW9uKG9WaWV3OiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKG9Db250cm9sbGVyOiBhbnksIG9Tb3VyY2U6IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSwgc0NvbnRyb2xDb25maWc6IGFueSwgc0NvbGxlY3Rpb25QYXRoOiBhbnkpIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpO1xuXHRcdFx0bGV0IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChcblx0XHRcdFx0b09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmXG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDUwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0KChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUaXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zY3JvbGxUb1NlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25TdGF0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNkRNQSxvQkFBb0IsV0FEekJDLGNBQWMsQ0FBQyxrREFB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